Вложенный тип может быть объявлен как закрытый, защищенный или защищенный внутренний.Разумеется, вы все равно можете объявить вложенные типы как публичные или внутренние - просто вы можете только объявить их с указанными выше модификаторами доступа, когда они вложены:
public class OuterClass
{
private class PrivateNested {}
protected class ProtectedNested {}
protected internal class ProtectedInternalNested {}
public class PublicNested {}
internal class InternalNested {}
}
Обратите внимание, что вы не может объявить тип, вложенный в struct
, в protected
или protected internal
, потому что это бессмысленно:)
public struct OuterStruct
{
private class PrivateNested {}
public class PublicNested {}
internal class InternalNested {}
}
C #не разрешает вкладывать типы в интерфейсы (к сожалению, IMO - это было бы полезно для контрактов кода).
Все это верно и для других вложенных типов (перечисления, структуры, интерфейсы, делегаты).