为什么可以';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));
}

为什么可以';t我重载*运算符以将矩形与2D向量相乘

如果一个或多个类型是用户定义的,并且重载定义包含在所涉及的一个类型中,则可以重载*。如果所涉及的类型是内置的和/或您不控制源代码,您将无法定义自己的重载。(参见: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);