是否需要两个操作符重载方法



是否有一种方法可以告诉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时调用另一个。

最新更新