有没有办法在 C# 中做这样的事情?考虑以下示例并假设 Child1、Child2、Child3 都是 Parent 的 child -
class Class1
{
SomeObject< Parent > mSomeObject;
Class1()
{
if (condition1)
mSomeObject = new SomeObject<Child1>();
else if (condition2)
mSomeObject = new SomeObject<Child2>();
else if (condition3)
mSomeObject = new SomeObject<Child3>();
}
}
想法是 Class1 将 SomeObject 作为成员,但直到运行时才确定它应该采用 SomeObject 的什么通用形式。任何帮助,将不胜感激。谢谢!
最佳答案
你应该使用基于接口(interface)的继承。这将允许 child1、child2 和 child3 是多态的,并在不需要这种保护逻辑的情况下具有父级的特征。随着 IF 测试的消失,您的代码将更具可读性,并且以后更容易修改。
这是我刚刚用 LINQPad 编写的示例,用于展示这一点。
public interface ICar
{
bool IsAutomatic();
}
public class Silverado : ICar
{
public bool IsAutomatic()
{
return true;
}
}
public class Semi : ICar
{
public bool IsAutomatic()
{
return false;
}
}
void Main()
{
ICar car = new Silverado();
bool isAuto = car.IsAutomatic();
isAuto.Dump();
car = new Semi();
isAuto = car.IsAutomatic();
isAuto.Dump();
}
输出:
True
False
我更喜欢基于接口(interface)的继承,而不是 AllenG 描述的抽象类。多重继承等原因——一个类可以实现多个接口(interface),但只能继承一个类。
希望这有助于...
关于c# - 在 C# 中,有没有办法编写一个泛型,使得 Object<Child> : Object<Parent>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292917/