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。