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