c#中的等于按引用或值进行比较吗?

use*_*051 3 .net c#

var A = new obj(1,2,3); //parameters are just used to set some fields no randomness is involved
var B = A;
var C = new obj(1,2,3); 
Run Code Online (Sandbox Code Playgroud)

我想确定我的理解是否正确

  • A.Equals(B).Equals(C)(true)
  • A == C(假)
  • A == B(真)

Equals()比较两个对象之间所有字段和属性的值,是否可以肯定地信任它?

也确实Equals()用反射?

SLa*_*aks 12

这取决于你如何写它.

base object.Equals()方法严格按引用比较实例.

您可以Equals()在自己的类中覆盖以执行任何操作.

最后,ValueType.Equals()(由所有结构继承)使用反射按值进行比较; 你应该在制作自己的结构时重写它.