2009-06-19 93 views

回答

67

是的,你不能让他们顶层类,它们必须是内部类

public class Outer 
{ 
    protected class Foo 
    { 
    } 
} 

这是罚款,这意味着只有类允许看到富是外

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内部),因为外部级别类的访问修饰符定义了它们相对于其他程序集的可见性。仅在程序集内(或通过InternalsVisibleTo向朋友)或程序集外可见。

因此,尽管公共/内部标识符这里用于一致性确实在IL的状态是简单的“公开”或“非公开”(作为Reflection.Emit flags show

+0

+1清晰的例子。 – 2009-06-19 13:38:50

11

protected能见度被用于指示“派生类可见”。这对班级内的事物是有意义的,但在班级一般没有意义。

对此的唯一例外是内部类,其中受保护的可见性意味着派生类将有权访问内部类。

3

是的,我们不能让他们顶层类,它们必须是内部类