1 c#
我是一个完整的菜鸟,所以如果我不在乎这个问题,请告诉我,如果需要,请告诉我.无论如何......我一直在学习值类型和引用类型,我想知道是否定义一个额外的构造函数(如稍后调用它)是一种创建类副本的有效方法.我尝试用一个简单的类测试它,它似乎工作.
public ClassClass(ClassClass exampleClass)
{
var1 = exampleClass.var1;
var2 = exampleClass.var2;
// ...
}
Run Code Online (Sandbox Code Playgroud)
...
有两种复制对象.
通过引用复制对象,您只需使用'='运算符即可.
例如:
var o1 = new ClassClass();
var o2 = o1;
Run Code Online (Sandbox Code Playgroud)
按值复制对象有几种方法,例如:
由构造函数复制(如您所写)
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Student(Student std)
{
FirstName = std.FirstName;
LastName = std.LastName;
}
}
Run Code Online (Sandbox Code Playgroud)
使一个辅助类传递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;
}
}
Run Code Online (Sandbox Code Playgroud)
通用复制对象(使用Refelection)
private static void CopyClass<T>(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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为这个类写一个扩展方法,我建议这样做.
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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
263 次 |
最近记录: |