.NET 中的受保护类
Posted
技术标签:
【中文标题】.NET 中的受保护类【英文标题】:Protected Classes in .NET 【发布时间】:2010-11-04 07:17:56 【问题描述】:可以在.NET 中保护类吗? 为什么/这不可能?
【问题讨论】:
【参考方案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】:不能在命名空间内定义受保护的类。它只能声明为嵌套类。它可以在其他嵌套类中实例化,可以被其他嵌套类继承,也可以从其他嵌套类继承。
嵌套类以及从父类继承的类(派生类或子类)都可以访问父类的受保护成员。
【讨论】:
这也只是重复了现有答案的状态。以上是关于.NET 中的受保护类的主要内容,如果未能解决你的问题,请参考以下文章