CA1034: вложенные типы не должны быть видимыми
Свойство | Значение |
---|---|
Идентификатор правила | CA1034 |
Заголовок | Вложенные типы не должны быть видимыми |
Категория | Проектирование |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 8 | No |
Причина
Видимый извне тип содержит объявление видимого извне типа. Это правило не распространяется на вложенные перечисления, защищенные типы и шаблоны построителя.
Описание правила
Вложенный тип — это тип, объявленный внутри области другого типа. Вложенные типы удобно использовать для инкапсуляции закрытых сведений о реализациях содержащего их типа. В силу этого вложенные типы не должны быть видимыми для внешнего кода.
Не используйте внешние видимые вложенные типы для логической группировки или во избежание конфликтов имен. Вместо них следует использовать пространства имен.
Вложенные типы включают в себя понятие доступности членов, которое некоторые программисты не всегда четко понимают.
Защищенные типы можно использовать в подклассах и вложенных типах в сценариях дополнительной настройки.
Устранение нарушений
Если вложенный тип не должен быть видимым извне, следует изменить его доступность. В противном случае нужно удалить вложенный тип из его родителя. Если целью вложенности является категоризация вложенного типа, используйте пространство имен для создания иерархии.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показан тип, нарушающий это правило.
public class ParentType
{
public class NestedType
{
public NestedType()
{
}
}
public ParentType()
{
NestedType nt = new NestedType();
}
}
Imports System
Namespace ca1034
Class ParentType
Public Class NestedType
Sub New()
End Sub
End Class
Sub New()
End Sub
End Class
End Namespace