• 关于Equals和==的应用


    关于Equals和==的应用:
    这两个都是用于判断等于的

    区别:
    前一个是方法,Object的,有两个实现;后一个是运算符

    无论哪一种都可以重载。当然你要写出重载的实现。这一点有原则的,建议参看MSDN的《Equals 和相等运算符 (==) 的实现指南》,ms-help://MS.MSDNQTR.2003FEB.2052/cpgenref/html/cpconimplementingequalsoperator.htm

    [来源于MSDN资料----Begin]
    类型的类别
    通用类型系统支持两种一般类别的类型,每一类都细分成子类别:

    值类型
    值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。值类型可以是内联的(由运行库实现)、用户定义的或枚举的。有关内联值类型的列表,请参见 .NET Framework 类库。


    引用类型
    引用类型存储对值的内存地址的引用,位于堆上。引用类型可以是自描述类型、指针类型或接口类型。引

    用类型的类型可以由自描述类型的值来确定。自描述类型进一步细分成数组和类类型。类类型是用户定义

    的类、装箱的值类型和委托。
    [来源于MSDN资料----End]


    类型有两类:

    值类型主要由两类组成:Struct(结构)类型 ,枚举类型 。
    结构类型包括用户定义的 struct 类型以及下列内置的简单类型:{Numeric(数值)类型 [整型 ,浮点型 ,decimal ],bool }

    引用类型包括:string ,object ,class以及数组,当然也有指针(在C#里面属于不安全类型,在这里仅仅提及,不讨论)


    这里要说的是这些类型的等于比较有一定区别:
    值类型和string无论用Equals和==都是比较内容,内容相等返回true,反之false;
    除了string外的引用类型使用Equals和==都是比较地址,地址相等返回true,反之false;


    需要注意一点:
    关于Object.Equals。最好参看MSDN的这个部分。


    这里写个int 和 object(装箱int这类值类型),看下Equals和==的结果。以下代码着重观察object.Equals对值类型装箱后的比较。在此仅仅写个小代码演示:

    int i = 0;
    int j = 0;

    Console.WriteLine(i == j);//true;
    Console.WriteLine(i.Equals(j));//true;

    object x = i;
    object y = j;
    Console.WriteLine(x == y);//false;
    Console.WriteLine(x.Equals(y));//true;

    如果object x,y指向的是一个非string的引用类型对象,那么以上两个结果都是false


    关于这个只能写到这里了。

  • 相关阅读:
    Go语言之进阶篇服务器如何知道用户需要什么资源
    Go语言之进阶篇请求报文格式分析
    Go语言之进阶篇实现并发聊天功能
    Go语言之进阶篇文件传输
    Go语言之进阶篇获取文件属性
    Go语言之进阶篇简单版并发服务器
    Go语言之进阶篇TCP相互通信
    Go语言之进阶篇 netcat工具的使用
    HAProxy的高级配置选项-ACL篇之匹配访问路径案例
    HAProxy的高级配置选项-ACL篇之基于文件后缀实现动静分离
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/1250309.html
Copyright © 2020-2023  润新知