如何在基类中创建对象的克隆?

bsh*_*52s 1 c# inheritance

我需要一个方法,在基类中创建一个对象的空克隆?例如:

public class ChildClass : ParentClass
{
   public ChildClass()
   {
   }
}
public class ParentClass
{
  public SomeMethod()
  {
     // I want to create an instance of the ChildClass here
  }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我们在父类中定义了一个抽象方法.并且,所有子类都实现它们.但是,实现对所有人来说都是一样的,只是一种不同的类型.

public class ChildClass : ParentClass
{
   public ChildClass()
   {
   }
   public ParentClass CreateEmpty()
   {
      return new ChildClass();
   }
}
public class ParentClass
{
  public SomeMethod()
  {
     // I want to create an instance of the ChildClass here
     ParentClass empty = CreateEmpty();

  }
  public abstract ParentClass CreateEmpty();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从父类中执行此操作,以便我不必为每个不同的子类继续实现相同的逻辑?请注意,可能存在更多级别的继承(即ChildChildClass:ChildClass:ParentClass).

Mar*_*uła 5

如果使用反射对您来说不是问题,您可以使用Activator类来完成:


//In parent class
public ParentClass CreateEmpty()
{
    return (ParentClass)Activator.CreateInstance(this.GetType());
}
Run Code Online (Sandbox Code Playgroud)

这将返回所需类型的空对象.请注意,此方法不需要是虚拟的.

另一方面,我认为您当前的方法非常好,几行代码并不是那么糟糕.