簡體   English   中英

C#克隆類

[英]C# Cloning Classes

我在C#中創建了一個自定義Point類,因為常規Point類沒有很多我需要的功能。 我面臨的問題是,當我創建一個新的自定義Point類,然后創建另一個變量來表示該新創建的類時,會在內存中為其分配相同的地址。 我記得在C ++中必須使用&和*來更改它,但是在C#中我不知道該怎么做。

這是我面臨的問題的一個例子

public string Example()
{
   CustomPoint pt = new CustomPoint(0, 0);
   CustomPoint ptbuf = pt;
   ptbuf.X = 100;
   return(pt.X.ToString()); // returns the value of 100, instead of 0, which it should be
}

這就是應該發生的事情,而普通Point類會發生什么

public string Example2()
{
   Point pt = new Point(0, 0);
   Point ptbuf = pt;
   ptbuf.X = 100;
   return (pt.X.ToString()); // returns the value 0
}

另外,這是我制作的CustomPoint類的一部分,無法正常工作。

public class CustomPoint
{
    public float X { get; set; }
    public float Y { get; set; }
}

謝謝你的幫助。

您應該使它成為一個結構,而不是一個類。 結構是值類型,類是引用類型,這意味着將pt分配給ptbuf時,僅傳遞對象的引用,而不傳遞副本。 有關此主題的更多信息,請參見https://msdn.microsoft.com/en-us/library/ms173109.aspx

正如Henk所說,您應該使用一個struct並使它不可變。

除了創建自己的CustomPoint類之外,還不只是擴展 Point類。

public static class PointExtentsions
{
    public static int MyMethod(this Point point) { ... }
}

以上將MyMethod添加到任何Point

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM