.NET中受保护的类

时间:2009-06-19 12:45:51

标签: c# .net access-modifiers

可以在.NET中保护一个类吗? 为什么这不可能?

4 个答案:

答案 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)

无法在命名空间内定义受保护的类。它只能声明为嵌套类。它可以在其他嵌套类中实例化,并且可以由其他嵌套类继承,并且可以从其他嵌套类继承。

嵌套类以及从父类继承的类(派生类或子类)可以访问父类的受保护成员。