博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
教学-45 对象的相等
阅读量:5894 次
发布时间:2019-06-19

本文共 3271 字,大约阅读时间需要 10 分钟。

曾英-C#教学-45 对象的相等

目录

  • 四种比较对象的编程方法
  • 学会重写Equals方法
  • 理解对象的相等

1\对象的相等

  • ReferenceEquals()使用注意点:

    • 它是静态方法,需要用类来引用
    • 返回的是bool量
    • 表示的是两个引用符是否指向的是同一个对象
  • 实例Equals()方法注意点:

    • 它是虚方法,可以重写,可以重写来实现值的比较,
  • 静态Equals()方法:

  • ==:

image

1.1\ ReferenceEquals(f1, f2)方法实现:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _45_对象的相等{    class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            Cde f2 = new Cde(2);            Console.WriteLine(Cde.ReferenceEquals(f1, f2));          //由于所有的类都继承了Object类,所以这里在静态类调用的时候可以去掉"Cde."          //Console.WriteLine(ReferenceEquals(f1, f2));          //这样引用也是可以的        }    }    class Cde    {        int a;        public Cde(int b)        { a = b; }    }}输出结果:false理由:f1和f2指向的不是相同的地址

  

1.2\ 实例Equals方法的实现

class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            Cde f2 = new Cde(2);            Console.WriteLine(f1.Equals(f2));            //f1是个对象,用对象对实例方法的引用                  }    }    class Cde    {        int a;        public Cde(int b)        { a = b; }    }    结果:false

  

1.3\静态Equals方法的实现

class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            Cde f2 = new Cde(2);            Console.WriteLine(Equals(f1, f2));            /*            Console.WriteLine(Cde.Equals(f1, f2));            这样也是可以的             */         }    }    class Cde    {        int a;        public Cde(int b)        { a = b; }    }    结果:false

  

1.4\ ==的实现:

class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            Cde f2 = new Cde(2);            Console.WriteLine(f1==f2);                    }    }    class Cde    {        int a;        public Cde(int b)        { a = b; }    }        结果:false

  

1.5\要让结果为真的方法:

  • 这里,将f1的地址值赋值给f2,都指向了同一个地址,那么他们就是相等的了
class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            //这里是关键            Cde f2 = f1;            Console.WriteLine(f1==f2);            f1.a = 43; f2.a = 22;            Console.WriteLine(Equals(f1,f2));            //输出结果还是真,此时,f1                        Console.WriteLine(f1.a);            //输出结果是22,            //因为没有为f2重新分配新的地址栈        }    }    class Cde    {        int a;        public Cde(int b)        { a = b; }    }        结果:TRue    理由:指向同一个地址

  

1.6\实例Equals()虚方法的重写:

class Program    {        static void Main(string[] args)        {            Cde f1 = new Cde(2);            Cde f2 = new Cde(2);                       //f1.a = 2; f2.a = 2;            Console.WriteLine(f1.Equals(f2));            Console.WriteLine(f1.a);         }    }    class Cde    {        public int a;        public Cde(int b)        { a = b; }        //重写虚方法        //方法逻辑:只判断属性的值是否相等,不判断地址是否相同        public override bool Equals(object obj)//这里括号中的参数不能修改        {            //避免程序出错            //加入obj为空或者obj类型不等于cde的类型,那么返回假,避免别的程序出错            if ((obj == null) || (obj.GetType() != typeof(Cde))) return false;                        Cde f3 = (Cde)obj;//强制类型转换            if (f3.a == this.a) return true;//f3的a与对象f1的a进行比较,因为是用f1来调用equals的方法.            else return false;        }    }

  

转载于:https://www.cnblogs.com/pancong-520/p/8401624.html

你可能感兴趣的文章
mysql安装,远程连接,以及修改密码
查看>>
Dart服务器端 shelf_route包
查看>>
spring security(四)
查看>>
js中return、return false、return true的区别
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
数据库水平切分(其他应用)
查看>>
easyui 将已经是 textbox 的输入框改成时间框
查看>>
python基础整理——计算机语言分类
查看>>
python基础学习整理——字典
查看>>
promise
查看>>
如何使用ABSL代码调用Web service
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
SAP CRM和C4C的客户主数据修改历史记录查询
查看>>
如何在CRM WebClient UI里使用HANA Live Report
查看>>
树莓派终端安装FTP服务器
查看>>
Tornado Web 开发 框架搭建 (3)
查看>>
[python]运维辅助脚本
查看>>
京东&微信、手机QQ引领社交化购物趋势
查看>>