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

标签 c# .net clr

我注意到在 .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/

相关文章:

c# - 如何从 IQueryable<T> 返回 HttpStatusCode?

c# - C# 增加 IP 地址控制方式

c# - 如何摆脱 app.config 并将其全部移至代码中?

windows - 0xc000007b 错误 - 但所有 DLL 都是 32 位的

C# - 静态成员与实例成员

c# - 在 C# 中解析 JSON 的最有效方法

.NET 禁用非 TLS1.2 的入站

java - 使用 tcp 从 java 发送 double 到 C#

c# - 为什么 "\u1FFF:foo".StartsWith (":") 返回 true?

asp.net - 遍历 !DumpHeap 输出以读取内存偏移量处的值