• C#:引用类型和值类型的相等比较


    1. 引用类型的相等比较

    System.Object定义了3个不同的方法来比较对象的相等性:ReferenceEquals()和Equals()的两个版本。再加上比较运算符,实际上有4种进行相等比较的方式。

    • ReferenceEquals()方法
    public static bool ReferenceEquals(object objA, object objB)

    ReferenceEquals()是一个静态方法,测试两个引用是否指向类的同一个实例,即两个引用是否包含内存中的相同地址。作为静态方法,它不能重写,所以只能使用System.Object的实现代码。如果提供的两个引用指向同一个对象实例,ReferenceEqualsa()总是返回true,否则就返回false,但是它认为null等于null。

    1 SomeClass x, y;
    2 x = new SomeClass();
    3 y = new SomeClass();
    4 bool B1 = ReferenceEquals(null, null);   //return true
    5 bool B2 = ReferenceEquals(null, x);      //return false
    6 bool B3 = ReferenceEquals(x, y);         //return false because x and y point to different objects
    • 虚拟的Equals()方法
    public virtual bool Equals(object obj)

    返回一个值,该值指示当前的Object是否等于当前的Object
    Equals的默认实现仅支持引用相等,但派生类可重写此方法以支持值相等

    在下面的列表中,x,y,z表示不为空引用:

    (1)除涉及浮点型的情况外,x.Equals(x)都返回true

    (2)x.Equals(y)返回与y.Equals(x)相同的值

    (3)如果x和y都为NaN,则x.Equals(y)返回true

    (4)当且仅当x.Equals(z)返回true时,(x.Equals(y)&&y.Equals(z))才返回相同的值

    (5)只要不修改x和y引用的对象,对x.Equals(y)的相继调用将返回相同的值

    (6)x.Equals(null)返回false

     1 using System;
     2 
     3 public class Sample {
     4     void Method() {
     5     Object Obj1 = new Object();
     6     Object Obj2 = new Object();
     7     Console.WriteLine(Obj1.Equals(Obj2)); //===> false
     8     Obj2 = Obj1;
     9     Console.WriteLine(Obj1.Equals(Obj2)); //===> true
    10     }
    11 }
    • 静态的Equals()方法
    public static bool Equals(object objA, object objB)

    如果objA是与objB相同的实例,或者如果两者均为空引用,或者如果objA.Equals(objB)返回true,则为true,否则为false

      2. 值类型的相等比较

    在进行值类型的相等比较时,采用与引用类型相同的规则:ReferenceEquals()用于比较引用,Equals()用于比较值。最大的区别是,值类型需要装箱才能把它们转换为引用,才能对它们执行方法。

    ReferenceEquals()在应用值类型时,总是返回false,因为为了调用这个方法,值类型需要装箱到对象中。即使使用下面的代码:

    bool b = ReferenceEquals(v, v);          //v is a variable of some value type

    也会返回false,因为在转换每个参数时,v都会被单独装箱。

  • 相关阅读:
    视差插件parallarx
    经典幻灯片插件Swiper
    经典全屏滚动插件fullPage.js
    Dialog插件artDialog
    html5 canvas 做的一个时钟效果
    CSS3 Transitions, Transforms和Animation使用简介与应用展示
    微软官方下载地址
    Windows 7 下配置IIS,并且局域网内可访问(转载)
    C# 使用HttpWebRequest 实现文件的上传
    小图标网站
  • 原文地址:https://www.cnblogs.com/LilianChen/p/2958106.html
Copyright © 2020-2023  润新知