有没有办法在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个类继承。

希望这可以帮助...

08-04 19:56