扩展一个类使其成为可转换的

时间:2013-09-09 11:13:02

标签: c# xna

我想扩展一个类(Vector2)以使其可以转换为Point。 我该怎么做?

部分问题:

  1. 扩展课程
  2. 将类转换为另一个类
  3. 最后我希望能够做到这一点:

    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
    

1 个答案:

答案 0 :(得分:12)

你做不到。

Vector2struct,而不是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();

注意:这种方式比隐式地将矢量转换为点更直观,因为矢量不是一个点。隐式演员在这些类型之间没有任何意义。实际上,隐式转换非常有用的情况非常少。