为什么要使用一个而不是另一个呢?
发布于 2012-10-02 04:03:46
Equals
和==
都可以重载,因此调用其中一个的确切结果会有所不同。请注意,==
是在编译时确定的,因此虽然实际实现可能会更改,但使用哪个==
在编译时是固定的,这与Equals
不同,后者可以根据左侧的运行时类型使用不同的实现。
例如,string
对==
执行相等性测试。
还要注意,两者的语义都可以是complex。
最佳实践是像这样实现相等。请注意,您可以根据计划如何使用类来简化或排除所有这些操作,而且struct
已经完成了大部分操作。
class ClassName
{
public bool Equals(ClassName other)
{
if (other == null)
{
return false;
}
else
{
//Do your equality test here.
}
}
public override bool Equals(object obj)
{
ClassName other = obj as null; //Null and non-ClassName objects will both become null
if (obj == null)
{
return false;
}
else
{
return Equals(other);
}
}
public bool operator ==(ClassName left, ClassName right)
{
if (left == null)
{
return right == null;
}
else
{
return left.Equals(right);
}
}
public bool operator !=(ClassName left, ClassName right)
{
if (left == null)
{
return right != null;
}
else
{
return !left.Equals(right);
}
}
public override int GetHashCode()
{
//Return something useful here, typically all members shifted or XORed together works
}
}
发布于 2008-09-27 21:53:48
该示例是因为类DateTime实现了IEquatable接口,该接口实现了“用于确定实例相等性的特定类型的方法”。根据MSDN的说法。
发布于 2008-09-27 21:54:12
需要考虑的另一件事是:如果您从另一种语言访问对象,则==操作符可能不可调用,或者可能具有不同的含义。通常,最好有一个可以按名称调用的替代方案。
https://stackoverflow.com/questions/144530
复制相似问题