[英]C# Cloning Objects that implement neither IClonable or ISerializable
[英]How can I copy/clone objects(reference type) without using IClonable in C#?
我不想一一分配屬性。 請不要說,我需要 1 1 分配。我知道IClonable 接口但不幸的是,假設 Point 類來自其他庫,所以我無法修改。 如何實現屬於其他庫的克隆對象?
在下面的示例中,正如預期的那樣,當我們更改 p2 時,p1 也會更改。 我的目標是復制 p1,當我改變復制對象時,我不想改變主對象。 在他的示例中,我希望 p1 保持原樣。
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
Point p1 = new Point(5,6);
Point p2= p1;
p2.X = 9;
Console.WriteLine("x={0}, y={1}", p1.X, p1.Y);
}
class Point
{
// Constructor:
public Point(int x, int y)
{
X = x;
Y = y;
}
// Property implementation:
public int X { get; set; }
public int Y { get; set; }
}
}
您可以使用從System.Object
繼承的MemberwiseClone
方法:
public Point ShallowClone()
{
return (Point)this.MemberwiseClone();
}
ICloneable
是一個接口,而不是一個類。 是否實現ICloneable
對逐個分配屬性沒有影響。
其他選項:
Point
的代碼或無法從中派生您的實現:
Point
實現為結構。 可以通過簡單的賦值來復制結構。Point
實現為自動提供值行為(不變性、值相等性)等的類或結構record
。 請參閱: 記錄(C# 參考) 。我使用 automapper 解決了這個問題。
您可以查看我的解決方案:
https://dotnetfiddle.net/En51IP (使用新方式)
https://dotnetfiddle.net/iapj84 (使用舊方法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.