gpt4 book ai didi

c# - 扩展一个类以使其可类型转换

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:12 26 4
gpt4 key购买 nike

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

部分问题:

  1. 扩展类(class)
  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

最佳答案

你不能那样做。

Vector2struct , 不是 class .正如你所知,不可能从 struct 中推导出来。因为结构在堆栈上分配固定大小。所以多态是不可能的,因为派生struct会有不同的尺寸。

作为解决方法,您可以创建 extension method ToPoint 将返回结构实例 Point :

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

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

关于c# - 扩展一个类以使其可类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com