【发布时间】:2009-12-18 12:03:47
【问题描述】:
我有以下设置(显然是简化的):
一个抽象类,带有一个 A 对象和一个抽象方法
abstract public class X
{
protected A myA;
abstract public int MethodForX();
}
两个继承类,每个类都覆盖方法。然而,他们不使用 A 对象,而是使用 B 和 C 对象,每个对象都继承自 A。
public class Y : X
{
public Y()
{
myA = new myB(); //B inherits from A
}
override public int MethodForX()
{
return (myA as myB).MethodForB(1);
}
}
public class Z : X
{
public Z()
{
myA = new myC(); //C inherits from A
}
override public int MethodForX()
{
return (myA as myC).MethodForC(1, 2);
}
}
我无法直接控制 A、B 和 C。(具体来说,B 和 C 是两个不同的表适配器,A 是它们的共同祖先,MethodForB/C 是 GetData 方法,每个都有不同的参数。 )
我不喜欢每次想要访问该字段时都使用“as”。我想让 Y 和 Z 知道该字段属于他们所需的类,但将该类限制为 X 中类的继承者。
有没有办法做到这一点,或者我是否试图做一些可怕的事情?
【问题讨论】:
-
我不太确定你的评论是否意味着“它正在工作”,但是是的 - 你可以拥有
class X {}、class X<T> : X {}、class Y : X<A>、class Z : X<B>,然后与Z通过非通用XAPI。 -
糟糕。是的,我的意思是它正在工作,干杯。
标签: c# inheritance abstract-class