1

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

部分问题:

  1. 扩展一个类
  2. 使一个类可转换为另一个类

最后我希望能够做到这一点:

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
4

1 回答 1

12

你不能那样做。

Vector2是一个struct,不是一个classstruct如您所知,由于结构在堆栈上分配固定大小,因此无法从中派生。所以多态是不可能的,因为派生struct的大小不同。

作为一种解决方法,您可以创建将返回 struct 实例的扩展方法ToPointPoint

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();

注意:这种方式比将向量隐式转换为点更直观,因为向量不是点。隐式转换在这些类型之间没有任何意义。实际上,隐式转换真正有用的情况很少。

于 2013-09-09T11:20:13.917 回答