我有以下类:
public abstract class Item
{
//...
}
public class Customer : Item
{
//...
}
public class Address : Item
{
//...
}
我希望能够使用自定义反射类创建完全克隆,如下所示:
Customer customer = new Customer();
ItemReflector irCustomer = new ItemReflector(customer);
Customer customerClone = irCustomer.GetClone<Customer>();
但是我遇到了GetClone方法的语法问题:
public class ItemReflector
{
private Item item;
public ItemReflector(Item item)
{
this.item = item;
}
public Item GetClone<T>()
{
T clonedItem = new T();
//...manipulate the clonedItem with reflection...
return clonedItem;
}
}
我需要更改上述GetClone()方法才能使其正常工作?
答案 0 :(得分:6)
如果您希望能够实例化new
,则需要T
约束:
public Item GetClone<T>() where T: new()
{
T clonedItem = new T();
//...manipulate the clonedItem with reflection...
return clonedItem;
}
答案 1 :(得分:0)
由于GetClone()
正在返回Item
,因此约束条件是T
是Item
的子类。
此外,由于ItemReflector
似乎不需要状态GetClone()
,因此应static
。