繁体   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