C# .NET是否等于()只是==?

C# .NET是否等于()只是==?,c#,reference,operators,equals,C#,Reference,Operators,Equals,可能重复: 嗨, 就一般用途而言,is==与Equals()相同吗?我的意思是,如果对象相同(参考),两者都返回true?第一个问题,不,不是 第二个问题,是的。如果 比较的是引用类型,它们都属于同一类型 如果它们指向相同的引用 ==运算符未重载 Equals方法不会被重写 如果是,则可以将==视为与Equals相同。否,它们有不同的用途 它们都可以通过继承类来定制,这意味着理论上A==B可以返回与A.Equals(B)不同的值,但主要区别在于==在编译时解析,而Equals在运行时解析

可能重复:

嗨,
就一般用途而言,is==与Equals()相同吗?我的意思是,如果对象相同(参考),两者都返回true?第一个问题,不,不是

第二个问题,是的。如果

  • 比较的是引用类型,它们都属于同一类型
  • 如果它们指向相同的引用
  • ==运算符未重载
  • Equals方法不会被重写

如果是,则可以将==视为与Equals相同。

否,它们有不同的用途
它们都可以通过继承类来定制,这意味着理论上
A==B
可以返回与
A.Equals(B)
不同的值,但主要区别在于==在编译时解析,而Equals在运行时解析

Equals
=
用于不同的目的:

因为Equals是一个虚拟方法,所以任何类都可以重写它的实现。表示一个值的任何类(本质上是任何值类型)或作为一个组的一组值,如复数类,都应该重写Equals。[……]

当类型是不可变的,即实例中包含的数据无法更改时,重载运算符==以比较值相等而不是引用相等可能很有用,因为作为不可变对象,只要它们具有相同的值,就可以认为它们是相同的。在非不变类型中重写运算符==不是一个好主意


顺便说一句,没有“一般”用途;计算机是二进制的,不管怎样!我投票赞成重新开放,因为重复提到的问题并没有提到
=
等于
之间的概念差异。相反,它处理操作数求值顺序的一种特殊情况,这是一个不同的主题。@Heinzi:你说得对。这可能是它的复制品。@Cody:说得好。有可能收回重新开放的投票吗?@Heinzi:没有,不幸的是没有。我自己也犯过很多这样的错误。但是,如果没有其他人同意,它们会在几天后消失。(巧合的是,最初提出的副本最初是我发现的问题的副本。)你说的编译时间是什么意思?最后一个项目符号应该是“重写”