将子类对象赋给父类对象,是可以的,但反过来就不行。
但是很多时候,子类对象希望能复制父类对象的值,该怎么办呢?
老老实实地一个个属性的赋值,当然是可以的,但这样好像傻了点,尤其是有好几种子对象的时候。
这时可以用泛型 + 反射来搞定。反射,我学艺不精,以为一定要对运行中的DLL来进行读取才行,其实是记错了。
class CAutoCopy<TParent, TChild>
where TParent : class, new()
where TChild : class, new()
{
public TChild AutoCopy(TParent parent)
{
TChild child = new TChild();
var ParentType = typeof(TParent);
var Properties = ParentType.GetProperties();
foreach (var Propertie in Properties)
{
if (Propertie.CanRead && Propertie.CanWrite)
{//循环遍历属性
Propertie.SetValue(child, Propertie.GetValue(parent, null), null);//进行属性拷贝
}
}
return child;
}
}
我因为考虑可能还有多个方法要用到这些泛型,所以用到泛型类;其实像参考文章那样,直接用泛型方法应该也可以的。
参考文章:
http://www.cnblogs.com/Soar1991/archive/2012/11/04/2754319.html
版权声明:本文为博主原屙文章,喜欢你就担走。