C# 规范指出:
基类成员声明的可访问性不控制该成员是否被继承——继承扩展到任何不是实例构造函数、静态构造函数或析构函数的成员。但是,继承的成员可能无法在派生类型中访问,因为它声明了可访问性,或者因为它被类型本身的声明隐藏了。
为什么一个不可访问的成员被认为是继承的?为什么做出这样的区分/实际?
作为一个具体的例子
class A
{
const string foo = "c";
internal void DoWork() { }
}
class B: A
{
const string bar = "d";//renamed to foo does not appear to have a noticeable impact
B() { bar = foo; }//inaccessible due to protection level
internal new void DoWork() { }//hide inherited member
}
在我看来,在运行时继承意味着共享状态和/或行为。在这种情况下foo
不会发生这种事情。
至于B
是否继承DoWork()
. 因此,DoWork()
成为其中的一员B
是直观且相关的。另一方面,为什么被foo
视为 的成员B
? B
无法读取或写入foo
。