我遇到了字段继承的问题。首先,我将解释我希望它如何工作,然后就如何更改语法来做我想做的事情征求建议。
这是我尝试过的:
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();
}
}
}
问题是 A 无法编译,因为它找不到用 D1 的集合覆盖的方法。这就是我期望它的工作方式:
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**
我可以看到的一种解决方案是添加“set;” 到 A1 的 D1 并在我尝试在 C 中使用它时抛出 NotImplementedException ,但这会阻止问题出现在编译器中。有人知道解决这个问题的方法吗?我真的很想将它们保留为字段,以便我可以使用 WPF 显示它们。