Можно ли защитить класс в .NET?
Почему это возможно?
Защищенные классы в .NET.
Ответ 1
Да, вы просто не можете сделать их классами верхнего уровня, они должны быть внутренними классами
public class Outer
{
protected class Foo
{
}
}
Это хорошо, это означает, что только классы, разрешенные для просмотра Foo, являются подклассами Outer
class X
{
// 'Outer.Foo' is inaccessible due to its protection level
private void Flibble(Outer.Foo foo)
{
}
}
class X : Outer
{
// fine
private void Flibble(Outer.Foo foo)
{
}
}
Обратите внимание: вы не можете объявить какой-либо внешний класс как закрытый, защищенный (или защищенный внутренний) в С#, поскольку модификатор доступа для классов внешнего уровня определяет их видимость по отношению к другим сборкам. Специально видимый только в сборке (или для друзей через InternalsVisibleTo) или вне сборки.
Таким образом, хотя общедоступные/внутренние идентификаторы используются здесь для согласованности, действительно, состояние в IL является просто "Public" или "NonPublic" (как Reflection.Emit флаги показывают)
Ответ 2
protected
видимость используется для обозначения "видимых для производных классов". Это имеет смысл в вещах внутри класса, но обычно не имеет смысла на уровне класса.
Единственным исключением из этого является внутренний класс, где защищенная видимость означает, что производные классы будут иметь доступ к внутреннему классу.
Ответ 3
Да, мы просто не можем сделать их классами верхнего уровня, они должны быть внутренними классами