【发布时间】:2015-06-12 16:03:14
【问题描述】:
我在 .NET Framework 的 GUID 类型的源代码中看到,Equals 和 == 运算符的实现执行非常相似的代码。
为什么== 运算符不对第一个参数调用 Equals 方法?像这样的:
public static bool operator ==(Guid a, Guid b)
{
return a.Equals(b);
}
【问题讨论】:
-
投票结束是基于意见,我们无法理解框架设计者/开发者的想法。
-
我的猜测是,在将
IEquatable添加到框架之前,操作符实现就已经存在。添加后,他们选择复制操作员代码而不是重写它(也许是避免更改旧代码的策略?)但这纯粹是猜测。对于更积极的内联,也可能是一个非常小的优化考虑,但在这种情况下,我不会把它作为代码重复的特别有价值的理由。或者这只是一个错误,代码审查中没有人认为它已经糟糕到值得努力修复。 -
我不认为链接的重复问题实际上回答了这个问题,如果
Guid它是一个值类型,因此它不能为空。重新打开问题.. -
对于
Guid的情况,由于实现是相同的,它可以调用Equals,但是这样做会进一步进入堆栈,并且增加不必要的开销。同样,如果出于某种原因Equals的实现需要 与==不同,则每个的基本实现已经分离,并且不需要进行重构。此外,正如@Habib 所说,这不一定与由于上下文而标记为重复的问题相同,我建议在标题中添加for Guid。 -
@BradleyDotNET 关于 .NET Framework 的实现细节还有很多其他问题,有时他们会从了解很多的人甚至 MS 员工那里得到非常好的答案。你不应该仅仅因为你无法回答就关闭它。
标签: c# .net equals-operator