获取类的类型并实例化它的另一个实例

时间:2011-01-05 09:08:28

标签: c# .net c#-4.0

问题

我有一个基类Number,它由类OneTwoThree继承。

我有一个属性

public Number SomeNumber{get;set;}

最初,我已将SomeNumber设置为OneTwoThree(随机生成值)。

稍后,我想将SomeNumber设置为旧类的相同类型的新类。这可能吗?如果是这样,怎么样?

实施例

初始化时,SomeNumber设置为One

稍后在该计划中,我想将SomeNumber设置为One的新实例。

2 个答案:

答案 0 :(得分:7)

我会在Number上添加一个抽象的方法CreateInstance,并在所有具体的子类中实现它。

abstract class Number
{
  abstract Number CreateInstance();
}

class One : Number
{
  override Number CreateInstance()
  {
    return new One();
  }
}

“稍后”

Number newNumber = SomeNumber.CreateInstance();

它不需要反射,因此是类型安全的,如果构造函数需要一些参数,它将支持参数。

答案 1 :(得分:1)

SomeNumber = (Number)Activator.CreateInstance(SomeNumber.GetType());

对于参数,您必须按如下方式填写参数:

public partial class Form1 : Form
{
    public Number SomeNumber { get; set; }
    public Form1()
    {
        InitializeComponent();

        SomeNumber = new One();

        SomeNumber = (Number)Activator.CreateInstance(SomeNumber.GetType(), new[] {1});
    }

}

public class Number
{

}

public class One : Number
{
    public One()
    {

    }
    public One(Object a)
    {

    }

}

Stefan上面的帖子是一种更好的实现方法。 另一种选择是创建一个对象工厂