首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >==或.Equals()

==或.Equals()
EN

Stack Overflow用户
提问于 2008-09-27 21:36:37
回答 6查看 23.8K关注 0票数 71

为什么要使用一个而不是另一个呢?

EN

回答 6

Stack Overflow用户

发布于 2012-10-02 04:03:46

Equals==都可以重载,因此调用其中一个的确切结果会有所不同。请注意,==是在编译时确定的,因此虽然实际实现可能会更改,但使用哪个==在编译时是固定的,这与Equals不同,后者可以根据左侧的运行时类型使用不同的实现。

例如,string==执行相等性测试。

还要注意,两者的语义都可以是complex

最佳实践是像这样实现相等。请注意,您可以根据计划如何使用类来简化或排除所有这些操作,而且struct已经完成了大部分操作。

代码语言:javascript
复制
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
    }
}
票数 3
EN

Stack Overflow用户

发布于 2008-09-27 21:53:48

该示例是因为类DateTime实现了IEquatable接口,该接口实现了“用于确定实例相等性的特定类型的方法”。根据MSDN的说法。

票数 2
EN

Stack Overflow用户

发布于 2008-09-27 21:54:12

需要考虑的另一件事是:如果您从另一种语言访问对象,则==操作符可能不可调用,或者可能具有不同的含义。通常,最好有一个可以按名称调用的替代方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/144530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档