有没有办法在C#中做类似的事情?考虑以下示例,并假定Child1,Child2,Child3都是Parent的子代-
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的一般形式。任何帮助,将不胜感激。谢谢!
最佳答案
您应该使用基于接口的继承。这将使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
我喜欢基于接口的继承,而不是AllenG描述的抽象类。多重继承之类的原因-一个类可以实现许多接口,但只能从1个类继承。
希望这可以帮助...