C#中的相等性判断(RefrenceEquals、Equals)
来源:互联网 发布:人工智能概念股及代码 编辑:程序博客网 时间:2024/06/08 16:17
/// ///等同性的数学定义:自反、对称、传递 /// /// /// RefrenceEqual: /// static bool ReferenceEquals(object objA, object objB); /// 值类型调用永远返回false(原因在于装箱) /// 如果两个变量指向同一个对象(具有相同的对象标识),则为true /// 对象标识:系统创建的每一个对象在创建时系统都会分配一个唯一 /// 的对象键(一个整数值,保存在Object的一个内部变量中), /// 这个值在Object的构造函数中设置,并且之后不会再更改, /// Object的GetHashCode()会返回该值做散列码 /// /// /// Equals: /// static bool Equals(object objA, object objB) /// 当不知道两个变量的运行时类型时使用此方法,不管值类型还是引用类型 /// 该方法会将判断的具体操作委托给其中的一个类型来处理 /// 其实现如下: /// public static bool Equals(object objA, object objB) { if (Object.ReferenceEquals(objA, objB)) return true; if (Object.ReferenceEquals(objA, null) || Object.ReferenceEquals(objB, null)) return false; return objA.Equals(objB); } /// /// 永远不要重定义上面的两个静态方法 /// /// /// 实例方法 Equals: /// override bool Equals(object obj) /// virtual bool Equals(object obj),当Object的实例方法Equals的行为与我们的类型 /// 不一致时,我们需要覆写。 /// Equals默认判断两个对象的是否引用相等,也就是说和静态方法RefrenceEquals行为 /// 完全一致。 /// /// 但值类型例外,System.ValueType重写了该方法,如果两个值类型变量的 /// 类型相同并且内容一致,则为相等。 /// ValueType是所有值类型(Struct关键字创建的类型)的基类,为了提供正确的行为, /// 它必须在不知道所有成员变量运行时类型的情况下,比较其派生类型中的 /// 所有成员(这意味着使用反射),所以ValueType.Equals方法效率并不高。 /// 因此,我们总是应该为自己定义的值类型提供一个高效的Equals覆写。 /// /// 对于引用类型,我们在希望改变其默认行为时才应该覆写Equals实例方法, /// 比如某个类型需要比较其内容而不是对象标识(如string的等同判断) /// 重写Equals方法总应该为该类型实现IEquatable<T>接口 /// 如下 /// public class Customer : IEquatable<Customer> { public override bool Equals(object obj) { if (object.ReferenceEquals(obj, null)) return false; if (object.ReferenceEquals(this, obj)) return true; // 此处总应该使用GetType来获取this的运行时类型(因为可能是派生实例) if (this.GetType() != obj.GetType()) return false; return this.Equals(obj as Customer); } public bool Equals(Customer customer) { // 比较各字段内容,省略 return true; } }
- C#中的相等性判断(RefrenceEquals、Equals)
- C#中的Equals、RefrenceEquals和==的区别
- C#中的相等判断:==和equals
- C#中的Equals、RefrenceEquals和==的区别与联系
- JavaScript 中的相等性判断
- javaScript中的相等性判断
- c# 关于相等判断
- C#判断对象相等
- 判断对象是否相等---重写equals方法
- 判断Integer值相等用equals
- C#中的相等
- C# 判断对象是否相等
- java中String的“==”和equals判断相等性
- java中String的“==”和equals判断相等性
- java中String的“==”和equals判断相等性
- java中String的“==”和equals判断相等性
- java中String的“==”和equals判断相等性
- java中String的“==”和equals判断相等性
- 归并排序-求逆序数算法
- PHP汉字转换为拼音
- android中的json数据解析
- 第三章数程序设计初步--控制结构综合项目4-1文件操作初体验练习1从文件读取数据
- poj 3009 搜索
- C#中的相等性判断(RefrenceEquals、Equals)
- 正则表达式
- 书籍阅读列表
- SlikSvn创建服务
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解
- 前端优化——按需加载
- C# WinForm验证码与图片绘制
- tk2d的static sprite batcher 的使用问题
- C#图像处理