有没有办法告诉C#这两个是相同的实现,只需要一次?
public static Matrix4 operator *(Transform u, Matrix4 v)
{
return u.Result * v;
}
public static Matrix4 operator *(Matrix4 u, Transform v)
{
return u* v.Result;
}
答案 0 :(得分:1)
没有语法允许您向C#声明您的运算符是可交换的。实现很简单并不重要,因为您实际上并没有多次编写相同的代码。对于更复杂的实现,实际逻辑可以放在共享的私有方法中,如下所示:
public static Matrix4 operator *(Transform u, Matrix4 v) {
return Mult(u, v);
}
public static Matrix4 operator *(Matrix4 u, Transform v) {
return Mult(u, v);
}
// The actual implementation goes here
private static Matrix4 Mult(Matrix4 u, Transform v) {
return u* v.Result;
}
这种方法可以避免重复实现的逻辑,因此如果您需要更正任何内容,则必须在一个地方进行更改。
答案 1 :(得分:0)
是的,他们是必需的。如果左操作数是Transform
而右操作数是Matrix
,则调用其中一个。如果左操作数是Matrix
则调用另一个操作数操作数是Transform
。