Поделиться через


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