Вложенные типы не должны быть видимыми
Обновлен: Ноябрь 2007
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
Категория |
Microsoft.Design |
Критическое изменение |
Критическое |
Причина
Видимый для внешнего кода тип содержит объявление видимого для внешнего кода типа. Данное правило не распространяется на вложенные перечислители и защищенные типы.
Описание правила
Вложенный тип — это тип, объявленный внутри области видимости другого типа. Вложенные типы удобно использовать для инкапсуляции закрытых сведений о реализациях содержащего их типа. В силу этого вложенные типы не должны быть видимыми для внешнего кода.
Не следует использовать видимые для внешнего кода вложенные типы для логической группировки или с целью предотвращения конфликтов имен. Для эти целей лучше применять пространства имен.
Некоторые программисты не всегда имеют четкое представление о доступности членов вложенных типов.
Защищенные типы можно использовать в подклассах, а вложенные типы — в сценариях расширенной настройки.
Предотвращение нарушений
Если вложенный тип не предназначен для доступа со стороны внешнего кода, измените видимость этого типа. В противном случае удалите вложенный тип из родительского типа. Если целью вложения является категоризация вложенных типов, используйте для создания иерархии пространство имен.
Отключение предупреждений
Не следует отключать вывод предупреждений для этого правила.
Пример
В следующем примере показан тип, который нарушает данное правило.
Imports System
Namespace DesignLibrary
Class ParentType
Public Class NestedType
Sub New()
End Sub
End Class
Sub New()
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
internal class ParentType
{
public class NestedType
{
public NestedType()
{
}
}
public ParentType()
{
NestedType nt = new NestedType();
}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class ParentType
{
public:
ref class NestedType
{
public:
NestedType()
{
}
};
ParentType()
{
NestedType^ nt = gcnew NestedType();
}
};
}