在.NET中保护类(Protected Classes in .NET)

2019-06-23 16:26发布

可一类的保护in.NET?
为什么是/不是这可能吗?

Answer 1:

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

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#中声明任何外部类为私有,受保护(或受保护的内部),因为外部级类的访问修饰符定义相对于其他组件自己的知名度。 具体可见仅(或通过InternalsVisibleTo朋友)或组件的外部的组件内。

因此,尽管公众/内部标识符这里使用的一致性真的IL的状态简直是“公开”或“非公开”(作为Reflection.Emit的标志显示 )



Answer 2:

protected可视性用来表示“可见派生类”。 这使得对事物意义上的类中,但通常具有在类级别没有任何意义。

唯一的例外,这是一个内部类,其中保护的可见性意味着派生类将有机会获得内部类。



Answer 3:

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



Answer 4:

受保护的类不能被定义里面namespace.It只能被声明为嵌套类。 它可以其他嵌套类中被实例化,并可能通过其他嵌套类被继承,它可以从其他嵌套类继承。

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



文章来源: Protected Classes in .NET