复制一个类,C#
有没有办法在C#中复制类? 像var dupe = MyClass(原创)。
您可能正在谈论深层复制(深层复制vs浅层复制)?
您必须:
[Serializable]
属性,则使用序列化和反序列化来创建深层副本。 public static T DeepCopy<T>(T other)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, other);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
要获得浅拷贝,可以使用Object.MemberwiseClone()
方法,但它是一种受保护的方法,这意味着您只能在类中使用它。
对于所有深层复制方法,重要的是要考虑对其他对象的任何引用,或循环引用,这可能导致创建比您想要的更深的副本。
并非所有的类都具有此功能。 可能,如果一个类有,它提供了一个Clone
方法。 为了帮助为你自己的类实现这个方法,在System.Object
中定义了一个MemberwiseClone
保护方法,它使当前实例的浅拷贝(即复制字段;如果它们是引用类型,引用将指向原始位置)。
如果你的班级刚刚有属性,你可以做这样的事情:
SubCentreMessage actual;
actual = target.FindSubCentreFullDetails(120); //for Albany
SubCentreMessage s = new SubCentreMessage();
//initialising s with the same values as
foreach (var property in actual.GetType().GetProperties())
{
PropertyInfo propertyS = s.GetType().GetProperty(property.Name);
var value = property.GetValue(actual, null);
propertyS.SetValue(s, property.GetValue(actual, null), null);
}
如果您有字段和方法,我相信您可以使用反射在新课程中重新创建它们。 希望这可以帮助
链接地址: http://www.djcxy.com/p/79361.html上一篇: copy a class, C#