【发布时间】:2012-03-28 15:38:45
【问题描述】:
在遵循声明式风格编写的 .NET 程序中,ReferenceEquals() 有哪些合法用途?
【问题讨论】:
-
当您想回答“这两个引用是否引用同一个对象”的问题时,一个合法的用途是?
-
声明式风格到底是什么意思,这与引用相等有什么关系?
-
@GregC 我知道,你显然知道,但是每个阅读代码的程序员都知道吗,而不必去查找?
-
对于预计不会覆盖
Equals的类,非虚拟ReferenceEquals方法比使用Equals及其关联的虚拟调度更快。速度优势足以证明使用它代替Object.Equals(Object,Object)是合理的。一个更有趣的问题是,当Equals(X,Y)为真但ReferenceEquals(X,Y)为假时,是否应该将其视为违反封装。恕我直言,在非常真实的意义上它应该。 -
@GregC:让 C# 中的
==运算符调用Object.Equals而不是执行等效于ReferenceEquals的引用比较,会使很多代码运行得更慢。从概念上讲,给定string s1="0"; string s2=0.ToString(); string s3=s1;",应该无法判断s3是从s2还是s1复制的,但是确保包含相同字符的所有字符串确实无法区分将是昂贵的,并且不会真正提供太多好处。
标签: c# .net pointers collections reference