今天学到了c#中的几个相等,我来和大家一起学习一下。
相等大概有下面四种,如下:
public static bool ReferenceEquals( object left, object right );
public static bool Equals ( object left, object right );
public virtual bool Equals( object right);
public static bool operator==( MyClass left, MyClass right );
第一和第二是不提倡重写的。
//这是Equalss的用法
public static bool Equals( object left, object right )
{
// 检查是否引用相等。
if (left == right )
return true;
if ((left == null) || (right == null))
return false;
return left.Equals (right);
}
下面是重写之后的Equals
public override bool Equals( object right )
{
// 检查是否为null:
// 在C#方法中,this指针永远都不可能为null。
if (right == null)
return false;
if (object.ReferenceEquals( this, right ))
return true;
// 下面将对此进行讨论。
if (this.GetType() != right.GetType())
return false;
// 比较两个实例的内容:
return CompareFooMembers(
this, right as Foo );
}
下面的一段话是我摘抄别人的,因为我写不好,怕误导了大家。大家共同学习吧
C#为我们提供了4种“相等判断”的方式,但是我们只需要考虑为其中两种提供自己的定义。我们永远都不应该重写Object.ReferenceEquals()静态方法和Object.Equals()静态方法[20],因为它们已经提供了正确的判断,且该判断与具体的运行时类型无关。对于值类型,我们应该总是重写Object.Equals()实例方法和operator==(),从而为它们提供效率较好的“相等判断”。对于引用类型,当我们认为相等的含义并非是对象标识相同时,才需要重写Object.Equals()实例方法。