これができるとは思いませんが、興味があります。スーパークラスで保護された変数をそのサブクラスでプライベートにすることは可能ですか?
いいえ。個人的には、最初から変数を非プライベートにすることは避けます。保護されたプロパティを提供します。基本プロパティを「隠す」ために新しいプロパティを作成することもできます...しかし、これは私には設計が不十分です。
他のクラスのいずれかを変更せずに、孫の観点から非表示を回避する方法は考えられませんが、私にはかなり恣意的に感じられます。
public class Base
{
private int foo = 5;
protected int Foo { get { return foo; } }
}
public class Child : Base
{
protected new int Foo { get { return 0; } }
}
public class GrandChild : Child
{
// Aargh, can't get at the original Foo...
}
なぜこれを達成したいのですか?おそらく、直接のサブクラスを封印し、代わりに他のクラスに構成を使用させる必要があります...
編集:コメントで説明されているように、これはプロパティを内部にする(そして私はまだプライベートフィールドを返すプロパティにする)ことが適切な状況であるように思えます。これにより、同じアセンブリ内の他のすべてのコードにプロパティへのアクセスが許可されますが、他のアセンブリにはアクセスできません。