C#中 ==和Equals的区别

文章探讨了等于运算符==与Equals方法在C#中的不同用法。Equals是对象的虚方法,允许子类重写以比较对象内容,而==默认比较引用或值。重载Equals是为了自定义比较逻辑,包括递归检查属性的相等性,并处理参数类型和空值情况。效率上,Equals通常低于==,因为它可能涉及更复杂的比较过程。

对比:

  1. == 是运算符,Equals是object中的虚方法,子类可重写;
  2. Equals 一般在子类中重写后用于比较两个对象中的内容是否相同;== 在没有运算符重载的前提下:引用类型用于比较地址是否相同,值类型用于比较值是否相同。
  3. 运算效率不同,一般Equals没有==效率高,因为一般Equals比较的内容比==多;

 重载Equals:

  1. 在类中声明一个名为Equals的方法,并将其标记为重载(override)Object类的Equals方法。

  2. 在重载方法中编写自定义比较逻辑,通常是比较对象的属性是否相等。如果属性的类型是值类型,则可以使用==运算符进行比较;如果属性的类型是引用类型,则需要递归调用Equals方法进行比较。

  3. 重载方法还需要处理传入参数为空或不是当前类类型的情况。

一个例子:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public override bool Equals(object obj)
    {
        if(obj == null || GetType()!= obj.GetType())
        {
            return false;
        }
        Person other = (Person)obj;

        return Name == other.Name && Age == other.Age;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值