【发布时间】:2012-07-20 20:48:36
【问题描述】:
为什么私有类的子类的用户不能访问私有类的公共成员数据?以下对我来说似乎非常违反直觉,因为它不会编译:
public class OuterClassBase {
private class PrivateInnerClass {
public void DoSomething () {}
}
protected class ProtectedInnerClass : PrivateInnerClass {}
}
public class OuterClassDerived : OuterClassBase {
public OuterClassDerived () {
ProtectedInnerClass o = new ProtectedInnerClass();
o.DoSomething(); // inaccessible due to its pretection level
}
}
使PrivateInnerClass public/protected 允许代码编译...
【问题讨论】:
-
我假设 OuterClassDerived 应该是 OuterClassDerived : OuterClassBase?
-
这只是 C# 中的基本范围规则。公共范围可在类外访问。私有范围可以在类内部访问。受保护的范围在类内部和派生类中可用。
-
反直觉?怎么样,如果您可以在定义它的范围之外访问私有类,现在这将是违反直觉的。
-
制作
PrivateInnerClassprotected将允许它编译。 -
注意:只有内部类可以声明为protected
标签: c# inheritance