【问题标题】:Protected Classes in .NET.NET 中的受保护类
【发布时间】:2010-11-04 07:17:56
【问题描述】:

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

【问题讨论】:

    标签: c# .net access-modifiers


    【解决方案1】:

    是的,你不能让它们成为顶级类,它们必须是内部类

    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# 中将任何外部类声明为私有、受保护(或受保护的内部),因为外部级别类的访问修饰符定义了它们相对于其他程序集的可见性。仅在程序集中(或通过 InternalsVisibleTo 对朋友可见)或在程序集外部特别可见。

    因此,虽然此处使用公共/内部标识符以保持一致性,但 IL 中的状态实际上只是“公共”或“非公共”(如 Reflection.Emit flags show

    【讨论】:

      【解决方案2】:

      protected visibility 用于表示“对派生类可见”。这对类内部的东西有意义,但通常在类级别没有意义。

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

      【讨论】:

        【解决方案3】:

        是的,我们不能让它们成为顶级类,它们必须是内部类

        【讨论】:

        • 这实际上只是重复了前面两个答案所述的内容。
        【解决方案4】:

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

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

        【讨论】:

        • 这也只是重复了现有答案的状态。
        猜你喜欢
        • 2011-06-06
        • 2015-04-23
        • 2010-10-27
        • 1970-01-01
        • 2011-08-18
        • 2010-09-30
        • 2013-06-20
        • 2010-10-18
        • 2021-02-16
        相关资源
        最近更新 更多