是否需要两种运算符重载方法?

时间:2014-06-03 11:12:56

标签: c# operator-overloading

有没有办法告诉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;
}

2 个答案:

答案 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