.NET中受保护的类

Aar*_*kur 35 .net c# access-modifiers

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

Shu*_*oUk 73

是的,你不能让他们成为顶级课程,他们必须是内部课程

public class Outer
{
    protected class Foo
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好,这意味着允许查看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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您不能在c#中将任何外部类声明为private,protected(或protected internal),因为外部级别的访问修饰符定义了与其他程序集相关的可见性.仅在装配体内(或通过InternalsVisibleTo向朋友)或在装配体外部特别可见.

因此,虽然这里使用公共/内部标识符来保持一致性,但IL中的状态只是"公共"或"非公共"(如Reflection.Emit标记所示)


Nad*_*zie 11

protected可见性用于表示"对派生类可见".这对于类中的事物是有意义的,但通常在类级别没有意义.

唯一的例外是内部类,其中受保护的可见性意味着派生类可以访问内部类.