C#克隆类

时间:2015-01-28 21:51:48

标签: c# class clone

我在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; }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

你应该把它变成一个结构,而不是一个类。结构是值类型,类是引用类型,这意味着当您将pt分配给ptbuf时,只传递对象的引用,而不是副本。有关该主题的更多信息,请参阅https://msdn.microsoft.com/en-us/library/ms173109.aspx

答案 1 :(得分:0)

正如Henk所说,你应该使用struct并使其成为不可变的。

而不是创建自己的CustomPoint课程,而不只是extend Point课程。

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

以上内容会将MyMethod添加到任何Point