我想扩展一个类(Vector2)以使其可以转换为Point。 我该怎么做?
部分问题:
最后我希望能够做到这一点:
Vector2 foo = new Vector2(5.2f); // X = 5.2f Y = 5.2F
Point red = new Point(2,2); // X = 2 Y = 2
red = foo; // I know that you can make classes convert themselves automatically... somehow?
// Now red.X = 5 red.Y = 5
答案 0 :(得分:12)
你做不到。
Vector2
是struct
,而不是class
。正如你所知,不可能从struct
派生,因为结构在堆栈上分配固定大小。所以多态是不可能的,因为派生的struct
会有不同的大小。
作为一种解决方法,您可以创建将返回struct extension method实例的Point
ToPoint
:
public static class Extensions {
public static void ToPoint(this Vector2 vector) {
return new Point((int)vector.X, (int)vector.Y);
}
}
//Usage:
Vector2 foo = new Vector2(5.2f);//X = 5.2f Y = 5.2F
Point red = foo.ToPoint();
注意:这种方式比隐式地将矢量转换为点更直观,因为矢量不是一个点。隐式演员在这些类型之间没有任何意义。实际上,隐式转换非常有用的情况非常少。