为什么 .Net 中的运算符不调用完全相同的静态方法?



我在中注意到了这一点。Net(Microsoft库和第三方),当有运算符要重写时,通常的做法是在运算符调用中实现运算符,而不是调用执行完全相同计算的静态方法。

例如,在System.Windows下的WPF库中,Vector结构声明了一个名为Add的静态方法并覆盖了加法运算符,两个方法都有完全相同的主体:

public static Vector Add(Vector vector1, Vector vector2)
{
    return new Vector(vector1._x + vector2._x,
                      vector1._y + vector2._y);
}
public static Vector operator + (Vector vector1, Vector vector2)
{
    return new Vector(vector1._x + vector2._x,
                      vector1._y + vector2._y);
}

我的问题是,为什么实现被写了两次,为什么操作员不应该调用Add

我理解在MSIL级别中,它节省了一个call操作,但这值得在可维护性方面做出妥协吗?

我会说这是一个单行的新操作。。。编写从另一个调用的方法调用的时间几乎与直接调用的时间一样长。如果是两三行代码。。。

当你有两个等价的方法相互调用时,就会有风险。。。之前或之后会有人开始问"哪一个更快"?"为什么他们做同样的事情,一个更快,一个更慢"?

我理解在MSIL级别,它节省了一个调用操作,但这值得在可维护性方面做出妥协吗?

什么是可维护性?添加两个矢量的实现永远不会改变。因此,这些功能将永远不会得到维护。此外,实现本身只是一行代码。用另一行代码(调用Add函数)替换它没有任何好处。

最新更新