可以在.NET中保护一个类吗? 为什么这不可能?
答案 0 :(得分:71)
是的,你不能让他们成为顶级课程,他们必须是内部课程
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#中将任何外部类声明为private,protected(或protected internal),因为外部级别的访问修饰符定义了与其他程序集相关的可见性。仅在装配体内(或通过InternalsVisibleTo向朋友)或在装配体外部特别可见。
因此虽然这里使用公共/内部标识符来保持一致性,但IL中的状态只是“公共”或“非公共”(如Reflection.Emit flags show)
答案 1 :(得分:11)
protected
可见性用于表示“对派生类可见”。这对于类中的事物是有意义的,但通常在类级别没有意义。
唯一的例外是内部类,其中受保护的可见性意味着派生类可以访问内部类。
答案 2 :(得分:2)
是的,我们不能让他们成为顶级课程,他们必须是内部课程
答案 3 :(得分:-1)
无法在命名空间内定义受保护的类。它只能声明为嵌套类。它可以在其他嵌套类中实例化,并且可以由其他嵌套类继承,并且可以从其他嵌套类继承。
嵌套类以及从父类继承的类(派生类或子类)可以访问父类的受保护成员。