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
不是很有表现力。)