gpt4 book ai didi

c# - 允许子类中的字段是父类中字段类型的后代类型

转载 作者:行者123 更新时间:2023-11-30 21:23:12 24 4
gpt4 key购买 nike

我有以下设置(显然已简化):

一个抽象类,有一个对象和一个抽象方法

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 中类的继承者。

有没有办法做到这一点,还是我想做一些可怕的事情?

最佳答案

你可以试试泛型,虽然它不是很漂亮:

abstract public class X<T> where T : A
{
protected T myA;
abstract public int MethodForX();
}

public class Y : X<B>
{
public Y()
{
myA = new B(); //B inherits from A
}
override public int MethodForX()
{
return myA.MethodForB(1);
}
}

public class Z : X<C>
{
public Z()
{
myA = new C(); //C inherits from A
}
override public int MethodForX()
{
return myA.MethodForC(1, 2);
}
}

关于c# - 允许子类中的字段是父类中字段类型的后代类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1927833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com