为什么可以';t我重载*运算符以将矩形与2D向量相乘
本文关键字:向量 运算符 2D 重载 为什么 | 更新日期: 2023-09-27 18:00:37
为了方便缩放2D精灵,我试图重载乘法运算符,但似乎其中一个操作数必须是包含类型。这很遗憾,因为我并不觉得我的解决方案不合逻辑。此外,我发现这样的运算符重载应该在其中一个操作数的类声明中声明。那么,我是否必须创建自己的自定义SuperRectangle类,或者有一些解决方法?
public static Rectangle operator * (Rectangle rect, Vector2 scale)
{
return new Rectangle(rect.X, rect.Y, (int)(rect.Width * scale.X), (int)(rect.Height * scale.Y));
}
如果一个或多个类型是用户定义的,并且重载定义包含在所涉及的一个类型中,则可以重载*
。如果所涉及的类型是内置的和/或您不控制源代码,您将无法定义自己的重载。(参见:C#语言规范第7.3节和第7.3.2节)
一般来说,您可以在Rectangle
和/或Vector2
上将您的逻辑转换为扩展方法,并且仍然可以实现您的总体目标。
public static class RectangleExtensions
{
public static Rectangle MultiplyBy(this Rectangle rect, Vector2 scale)
{
return new Rectangle(//...
}
public static Rectangle MultiplyBy(this Vector2 scale, Rectangle rect)
{
return new Rectangle(//...
}
}
// using it
Rectangle output = yourRect.MultiplyBy(yourVector);