是否有一种方法可以告诉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;
}
没有语法允许你向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;
}
这种方法使您避免重复实现的逻辑,因此,如果您需要更正任何内容,则必须在单个地方进行更改。
是的,它们是需要的。当左操作数为Transform
,右操作数为Matrix
时调用其中一个;当左操作数为Matrix
,右操作数为Transform
时调用另一个。