我有一组类的层次结构,需要能够从一个对象复制所有公共属性到另一个对象。
每个类都有一定数量的公共属性,可能与其他任何类不同。
示例:
class Base
{
// Common properties/methods...
public void Copy<T>(T data) where T : Base
{
// ...
}
}
class D1 : Base
{
public int ID
{
get;
set;
}
}
class D2 : Base
{
public string Name
{
get;
set;
}
}
我通过谷歌搜索了解到以下几种方法:
- 使用反射
- 生成IL代码
- 序列化
它们都非常复杂,或者非常慢,有时两者兼而有之。
我错过了什么吗?还有其他方法可以访问原始的this
指针吗?
编辑:
我来澄清一下。
T是调用类的类型。例如,如果由D1调用,则T将始终为D1。
泛型的原因是我无法确切知道T是什么。
我错过了什么吗?
我应该只使用Base data
作为参数吗?
D1.ID
复制到D2.Name
呢? - OdedBase data
作为参数使用,但这样只能复制在Base
中定义的属性,如果你想要类型安全的代码,请参考我的回答,了解如何在不同的子类之间复制属性。 - Niels van der Rest