Tip11 区别对待==和Equals
“相等性”分为两类:
1、“值相等性”——比较的两个变量所包含的数值相等。
2、“引用相等性”——比较的两个变量引用的是内存中的同一个对象。
“==”和“Equals”都倾向于表达这样一个原则:
对于值类型,如果类型的值相等,就应该返回True。
对于引用类型,如果类型只想同一个对象,则返回True。
“==”和“Equals”都可以被重载。比如,string是引用类型,但是在FCL中被重载为针对“类型的值”的比较,而不是针对“引用本身 ”的比较。下面举个例子:
类型Person,如果两者的IDCode相等,我们就认为是同一个人,这时就需要重载Equals方法
class Person
{
public string IDCode { get; private set; }
public Person(string idCode)
{
this.IDCode = idCode;
}
public override bool Equals(object obj)
{
return IDCode == (obj as Person).IDCode;
}
}
object a = new Person("NB123");
object b = new Person("NB123");
//False
Console.WriteLine(a == b);
//True
Console.WriteLine(a.Equals(b));
“==”和“Equals”的一点区别:
一般来说,对于引用类型,我们要定义“值相等性”,应该去重载Equals方法,同时让“==”表示“引用相等性”。