Можно ли защитить класс в .NET?
Почему это возможно?Защищенные классы в .NET
ответ
Да, вы просто не можете сделать их классы верхнего уровня, они должны быть внутренние классы
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)
{
}
}
Обратите внимание, что вы не можете объявить какой-либо внешний класс как закрытый, защищенный (или защищенный внутренний) в C#, поскольку модификатор доступа для классов внешнего уровня определяет их видимость по отношению к другим сборкам. Специально видимый только в сборке (или для друзей через InternalsVisibleTo) или вне сборки.
Таким образом, в то время как государственные/внутренние идентификаторы используются здесь для согласования действительно государство в IL просто «Public» или «непубличный» (как Reflection.Emit flags show) видимость
protected
используется для обозначения «видна производных классов ». Это имеет смысл в вещах внутри класса, но обычно не имеет смысла на уровне класса.
Единственным исключением из этого является внутренний класс, где защищенная видимость означает, что производные классы будут иметь доступ к внутреннему классу.
Да, мы просто не можем сделать их классами верхнего уровня, они должны быть внутренними классами
+1 четкость примера. –