我想使用c#Point
类型作为引用类型(它是一个结构)。我想过有一个CPoint
类,它包含一个Point
成员。有没有办法让Point
的成员成为Cpoint
的成员。我想避免
cpoint.point.X;
cpoint.point.Y;
我想做
cpoint.X;
cpoint.Y;
以及保留所有转化,运营商,Empty
等
这可以轻松完成吗?
答案 0 :(得分:8)
这样的东西?
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
答案 1 :(得分:5)
我认为唯一的方法是重写和传递所有属性,运算符和方法,就像这样:
public class PointReference {
private Point point;
public int X { get { return point.X; } set { point.X = value; } }
}
(更改班级名称; CPoint
不具备表现力。)
答案 2 :(得分:4)
如果您需要它作为参考类型,请使用ref关键字。它将允许您通过引用传递。有了这个,你将获得它作为一个结构的所有性能优势,以及具体了解你期望它作为一个参考。您还可以使用out关键字通过引用返回参数。
如果您需要它能够表示null,请使用Nullable<T>
如果您只是想访问就像foo.MyPoint.X
那样将其声明为如下字段:
class Foo {
public Point MyPoint;
}