我注意到在 .Net(Microsoft 库和第 3 方)中,当有一个运算符要覆盖时,通常的做法是在运算符调用中实现该运算符,而不是调用一个执行确切操作的静态方法相同的计算。
例如,在 System.Windows
下的 WPF 库中,Vector struct 声明了一个名为 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);
}
我的问题是为什么实现写了两遍,为什么operator不调用Add
?
我了解在 MSIL 级别它可以节省一个调用
操作,但这值得在可维护性方面做出妥协吗?
最佳答案
我会说这是一个单行新操作...编写方法调用以从另一个调用调用的时间几乎与直接执行它一样长。如果是两三行代码...
当你有两个等价的方法相互调用时会有风险......之前或之后有人会开始问“哪个更快”? “为什么如果他们做同样的事情,一个更快,一个更慢”?
关于c# - 为什么 .Net 中的运算符不调用完全相同的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29432557/