C# – 值类型的引用包装器

我想使用c# Point类型作为引用类型(它是一个结构)。 我想过有一个CPoint类,它包含一个Point成员。 有没有办法让Point成员成为Cpoint成员。 我想避免

 cpoint.point.X; cpoint.point.Y; 

我想要做

 cpoint.X; cpoint.Y; 

以及保留所有转换,操作员, Empty
这可以轻松完成吗?

如果您需要它作为引用类型,那么使用ref关键字。 它将允许您通过引用传递。 有了这个,你将获得它作为一个结构的所有性能优势,以及具体了解你期望它作为一个参考。 您还可以使用out关键字通过引用返回参数。

如果您需要它能够表示null,那么使用Nullable

如果您只是想访问就像foo.MyPoint.X那么将其声明为如下字段:

 class Foo { public Point MyPoint; } 

像这样的东西?

 public class CPoint { private Point _point = new Point(0,0); public double X { get { return _point.X; } set { _point.X = value; } } public double Y { get { return _point.Y; } set { _point.Y = value; } } public CPoint() { } public CPoint(Point p) { _point = p; } public static implicit operator CPoint(Point p) { return new CPoint(p); } public static implicit operator Point(CPoint cp) { return cp._point; } } 

编辑:如果您希望自动转换为/从点转换,请按上述方式实现隐式转换。 注意我没有测试这些,但它们应该工作。 更多信息: http : //msdn.microsoft.com/en-us/library/z5z9kes2.aspx

我认为唯一的方法是重写和传递所有属性,运算符和方法,就像这样:

 public class PointReference { private Point point; public int X { get { return point.X; } set { point.X = value; } } } 

(类名的更改是有意的; CPoint不是很有表现力。)