自定义类型的equals方法的实现
如果我们要创建一个类,无论是引用还是值类型的,经常要实现equals方法,下面把这两种一般的实现方式写在这里
1.引用类型的实现
class MyRefType : BaseType {
RefType refobj; //引用类型的对象
ValType valobj; //值类型的对象
public override bool Equals(object obj)
{
//当基类实现了equals时,首先要调用基类的equals方法,然后再进行别的,如果基类没有重写equals方法,那么这个判断可以去掉
if (!base.Equals(obj)) return false;
//因为this不肯能null,所以如果obj为null,将不可能相等
if (obj == null) {
return false;
}
//如果两个对象的类型不一样,将不可能相等
if (this.GetType() != obj.GetType()) return false;
//
MyRefType other = (MyRefType )obj;
if (!Object.Equals(refobj, other.refobj)) return false; //引用类型中无论是什么类型那个的变量都可以用object的静态equals方法进行判断,但是值类型的类的equals方法在这里是有区别的,引用可以用,但是值类型变量就改变了
if (!Object.Equals(valobj, other.valobj)) return false;
return true;
}
//当重写了equals方法是,一定要“==”和“!=”进行重写
public static Boolean operator ==(MyRefType o1, MyRefType o2) {
return object.Equals(o1,o2);
}
public static Boolean operator !=(MyRefType o1, MyRefType o2) {
return
RefType refobj; //引用类型的对象
ValType valobj; //值类型的对象
public override bool Equals(object obj)
{
//当基类实现了equals时,首先要调用基类的equals方法,然后再进行别的,如果基类没有重写equals方法,那么这个判断可以去掉
if (!base.Equals(obj)) return false;
//因为this不肯能null,所以如果obj为null,将不可能相等
if (obj == null) {
return false;
}
//如果两个对象的类型不一样,将不可能相等
if (this.GetType() != obj.GetType()) return false;
//
MyRefType other = (MyRefType )obj;
if (!Object.Equals(refobj, other.refobj)) return false; //引用类型中无论是什么类型那个的变量都可以用object的静态equals方法进行判断,但是值类型的类的equals方法在这里是有区别的,引用可以用,但是值类型变量就改变了
if (!Object.Equals(valobj, other.valobj)) return false;
return true;
}
//当重写了equals方法是,一定要“==”和“!=”进行重写
public static Boolean operator ==(MyRefType o1, MyRefType o2) {
return object.Equals(o1,o2);
}
public static Boolean operator !=(MyRefType o1, MyRefType o2) {
return
补充:软件开发 , C# ,