次の例では、Filter2クラスのBaseFilter.Type値をオーバーライドできますか?ある意味では 2番目の子クラスの基底クラス値のオーバーライド
void Main()
{
BaseFilter abc = new Filter2();
Console.WriteLine(abc.Type);
Filter1 d = new Filter2();
Console.WriteLine(d.Type);
Filter2 e = new Filter2();
Console.WriteLine(e.Type);
}
// Define other methods and classes here
public class BaseFilter
{
public virtual string Type { get { return "ABC"; } }
}
public class Filter1 : BaseFilter
{
public new virtual string Type { get { return "DEF"; } }
}
public class Filter2 : Filter1
{
public override string Type { get { return "X"; } }
}
、上記の例から、私は「abc.Type」値「X」を返すことができるかどうかを確認したいと思います。しかし、私はFilter1クラスから "new"キーワードを削除したくありません。
だから、ここでBaseFilterクラスの値をオーバーライドするべきではありません、最終的な期待
- FILTER1クラスです。
- ただし、Filter2クラスはBaseFilterの値とFilter1の値をオーバーライドする必要があります。
OOPSでは可能ですか?
'new'キーワードでシャドウイングされています。私はFILTER2にBaseFilter.Typeためのインターフェイスを使用してのアプローチを提案するが、それは良いデザインではなく、ただ「楽しい」のためであるが以下
ほとんど常に悪い考えです。 – Enigmativity