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
。