我想基于作为简单类型层次结构一部分的另一个实例的类型来实例化一个类的实例。
public abstract class Base
{
}
public class Derived1 : Base
{
}
public class Derived2 : Base
{
}
使用以下代码很容易做到
Base d1 = new Derived1();
Base d2;
if (d1 is Derived1)
{
d2 = new Derived1();
}
else if (d1 is Derived2)
{
d2 = new Derived2();
}
然而,是否有可能在没有if...else if...
链的情况下通过(例如)使用反射来获取d1
的构造函数(在我的示例中)并使用它来实例化另一个实例什么类型的d1
可能是什么?
答案 0 :(得分:9)
d2 = (Base)Activator.CreateInstance(d1.GetType());
答案 1 :(得分:1)
您可以使用工厂方法设计模式:
public abstract class Base
{
public abstract Base New();
}
public class Derived1 : Base
{
public override Base New()
{
return new Derived1();
}
}
public class Derived2 : Base
{
public override Base New()
{
return new Derived2();
}
}
然后:
Base d1 = new Derived1();
Base d2 = d1.New();
比反射更省力,但也更便携,更快。