CA1034: вложенные типы не должны быть видимыми
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();
}
};
}