首页 > 后端开发 > C++ > 如何最好地比较 .NET 中的引用类型?

如何最好地比较 .NET 中的引用类型?

Mary-Kate Olsen
发布: 2025-01-07 17:51:40
原创
231 人浏览过

How to Best Compare Reference Types in .NET?

.NET 引用类型比较的最佳实践

在 .NET 中比较引用类型时,务必理解引用相等和值相等之间的区别。引用相等检查两个引用是否指向同一对象,而值相等检查对象是否具有相同的数据。

重写相等运算符 (==) 和 Equals 方法

除非类型表示值语义(即,基于其数据视为相等的不可变对象),否则不建议重写相等运算符 (==) 和/或 Equals 方法来比较引用类型。在这种情况下,请考虑实现 System.IEquatable 接口以及三个运算符:Equals、GetHashCode 和 ==/!=。

IEquatable 接口

如果您的引用类型表示值语义,则实现 System.IEquatable。这确保了值相等的正确和高效实现,包括分别处理对象标识和值相等。

IComparable 接口

IComparable 主要设计用于值类型,而不是引用类型。避免将其用于引用类型。

自定义比较

与其重写相等运算符或实现 IComparable,不如考虑创建一个自定义方法来比较引用类型。使用 Equals 方法检查对象标识并重写它以比较相关的属性。

值相等的示例

以下是为 Point 类实现值相等的示例:

<code class="language-csharp">class Point : IEquatable<Point>
{
    public int X { get; }
    public int Y { get; }

    public Point(int x = 0, int y = 0) { X = x; Y = y; }

    public bool Equals(Point other)
    {
        if (other is null) return false;
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

    public override bool Equals(object obj) => Equals(obj as Point);

    public static bool operator ==(Point lhs, Point rhs) => object.Equals(lhs, rhs);

    public static bool operator !=(Point lhs, Point rhs) => !(lhs == rhs);

    public override int GetHashCode() => HashCode.Combine(X, Y);
}</code>
登录后复制

结论

对于具有值语义的引用类型,请实现 System.IEquatable 和所有三个相等运算符 (Equals、GetHashCode、==/!=)。对于表示可变值的引用类,请不要重写 ==/!= 运算符。使用它们的默认行为来检查对象标识。

以上是如何最好地比较 .NET 中的引用类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板