[英]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.