C#编写高质量代码第五天

总结:

1、对于引用类型,我们要定义“值相等性”,应该仅仅去重载equals
2、根据目前的了解RfrenceEquals只使用于直接比较字符串(那为啥我不直接用==来比较字符串呢?),不适合类和int类型
3、重写Equals方法的同时,也应该实现一个类型的接口IEquatable<T>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PromoteDay05
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * 总结:1、对于引用类型,我们要定义“值相等性”,应该仅仅去重载equals
             *       2、根据目前的了解RfrenceEquals只使用于直接比较字符串(那为啥我不直接用==来比较字符串呢?),不适合类和int类型
             *       3、重写Equals方法的同时,也应该实现一个类型的接口IEquatable<T>
            建议11:区别对待 == 和Equals
                原则:1、对于值类型,如果类型的值相等,就应该返回True
                      2、对于引用类型,如果类型指向同一个对象,则返回True
            */


            /*
             建议12:重写Equals时也要重写GetHashCode
             
             */
            Person p1 = new Person("123");
            Person p2 = new Person("123");
            Console.WriteLine(p1 == p2);
            Console.WriteLine(p1.Equals(p2));
            string s1 = "123";
            string s2 = "123";
            int i1 = 5;
            int i2 = 5;
            bool i = object.ReferenceEquals(i1, i2);
            Console.WriteLine(s1 == s2);
            Console.ReadKey();
        }
        public class Person : IEquatable<Person>
        {
            public string IdCode { get; set; }
            public Person(string idCode)
            {
                this.IdCode = idCode;
            }
            //因为类是引用类型,包括object基类,所以默认实现的比较方法也认为他俩不是同一个对象,
            //指向这个类的指针不同,但是可以通过重写equals来判断两个对象是否为同一对象。
            public override bool Equals(object obj)
            {
                return (obj as Person).IdCode == IdCode;
            }

            public override int GetHashCode()
            {

                return (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + "#" + this.IdCode).GetHashCode();

            }

            public bool Equals(Person other)
            {
                return other.IdCode == this.IdCode;
            }
        }


    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值