为什么我不能将*运算符重载为使用2D向量乘以矩形?

cat*_*all 3 c# xna

我试图重载乘法运算符以方便缩放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));
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ram 5

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