复制一个类,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#

    下一篇: What is the best way to copy a list?