这是复制课程的好方法吗?

我是一个完整的菜鸟,所以如果我不在乎这个问题,请告诉我,如果需要,请告诉我。 无论如何……我一直在学习值类型和引用类型,我想知道是否定义一个额外的构造函数(如稍后再调用它)是创建类副本的有效方法。 我尝试用一​​个简单的类测试它,它似乎工作。

public ClassClass(ClassClass exampleClass) { var1 = exampleClass.var1; var2 = exampleClass.var2; // ... } 

有两种复制对象。

  1. 参考副本
  2. 价值复制

通过引用复制对象,您只需使用’=’运算符即可。

例如:

 var o1 = new ClassClass(); var o2 = o1; 

按值复制对象有几种方法,例如:

由构造函数复制(如您所写)

  public class Student { public string FirstName { get; set; } public string LastName { get; set; } public Student(Student std) { FirstName = std.FirstName; LastName = std.LastName; } } 

使一个辅助类传递s1作为输入并返回s2作为结果

  static void Main(string[] args) { var s1 = new Student(); var s2 = ClassHelper.CopyObject(s1); } public static class ClassHelper { public static Student CopyObject(Student std) { var newStudent = new Student() { FirstName = std.FirstName, LastName = std.LastName }; return newStudent; } } 

通用复制对象(使用Refelection)

 private static void CopyClass(T copyFrom, T copyTo, bool copyChildren) { if (copyFrom == null || copyTo == null) throw new Exception("Must not specify null parameters"); var properties = copyFrom.GetType().GetProperties(); foreach (var p in properties.Where(prop => prop.CanRead && prop.CanWrite)) { if (p.PropertyType.IsClass && p.PropertyType != typeof(string)) { if (!copyChildren) continue; var destinationClass = Activator.CreateInstance(p.PropertyType); object copyValue = p.GetValue(copyFrom); CopyClass(copyValue, destinationClass, copyChildren); p.SetValue(copyTo, destinationClass); } else { object copyValue = p.GetValue(copyFrom); p.SetValue(copyTo, copyValue); } } } 

为这个类写一个扩展方法,我建议这样做。

 public static class ExtensionClass { public static Student CopyAsNewObject(this Student std) { var newStudent = new Student() { FirstName = std.FirstName, LastName = std.LastName }; return newStudent; } } static void Main(string[] args) { var s1 = new Student(); var s2 = s1.CopyAsNewObject(); }