フィールド継承の問題が発生しています。最初に、それをどのように機能させたいかを説明し、次に、構文を変更して目的の動作を行う方法について提案を求めます。
これが私が試したことです:
public abstract class A
{
public abstract D D1
{
get;
}
protected D _d2;
public virtual D D2
{
get { return _d2; }
set { _d2 = value; }
}
}
public abstract class B : A
{
protected D _d1;
public override D D1
{
get { return _d1; }
set
{
_d1 = value;
Update();
}
}
}
public abstract class C : A
{
public override D D1
{
get
{
return _d2.Find1();
}
}
public override D D2
{
get { return base.D2; }
set
{
base.D2 = value;
Update();
}
}
}
問題は、D1のセットでオーバーライドするメソッドが見つからないため、Aがコンパイルされないことです。これは私がそれが機能することを期待した方法です:
A ab = new B();
print(ab.D1);
ab.D1 = 4; // I would expect a compiler error
((B)ab).D1 = 4; // I would expect a compiler error
A ac = new C();
print(ac.D1);
ac.D1 = 4; // I would expect a compiler error
((C)ac).D1 = 4; // **I would expect this to work**
私が見ることができる1つの解決策は、「セット」を追加することです。A1のD1に移動し、Cで使用しようとすると、NotImplementedExceptionをスローしますが、これにより、問題がコンパイラに表示されなくなります。この問題を回避する方法を知っている人はいますか?WPFを使用して表示できるように、フィールドとして保持したいと思います。