我在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; }
}
感谢您的帮助。
答案 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
。