我试图重载乘法运算符以方便缩放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));
}
答案 0 :(得分:5)
如果一个或多个类型是用户定义的,并且重载定义包含在其中一个类型中,则可以重载*
。如果涉及的类型是内置的和/或您不控制源代码,您将无法定义自己的重载。 (参见:C# Language Specification的第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);