C# - 系统类 - Object类

Object类

ns:System

此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为类实例的类型声明

Object类的方法

ReferenceEquals静态方法

比较两个参数代表的对象是否引自托管堆的同一个对象的地址 如果是 返回true  此方法只比较引用类型的对象 如果你使用此方法比较值类型 则永远返回false 因为两个值类型在装箱成object后 永远不可能是托管堆上的同一个地址

 Person person1 = new Person();
 Person person2 = new Person();
 bool result=object.ReferenceEquals(person1,person2)//return false

 bool result=object.ReferenceEquals(null,person1)//return false

 ;
 ;
 bool result=object.ReferenceEquals(i, z);//return false

 Person person3=person1
 bool result=object.ReferenceEquals(person1,person3)//return true

 bool result=object.ReferenceEquals(null,null)//return true

Equals方法

此方法的运算比较复杂 它可以比较两个参数代表的对象是否引自托管堆的同一个对象的地址 也可以比较值类型的变量的值是否相等 还可以在派生类中重写Equals方法 重写可以按照自定义的逻辑来比较对象

 double i = 10.1;
 double z = 10.1;
 bool result=object.Equals(i, z);//return true

 Person Person1 = new Person();
 Person Person2 = new Person();
 bool result = object.Equals(Person1, Person2);//return false

我们可以在派生类中重写Equals方法 以实现自定义的比较 比如可以比较两个对象的ID属性是否相等 如

 public partial class Person
 {
     private string name;
     private int id;
     public string Name { get { return name; } set { name = value; } }
     public int ID { get { return id; } set { id = value; } }

     public override bool Equals(object obj)
     {
         if (obj is Person)
         {
             Person otherPerson = (Person)obj;
             return otherPerson.id == id;
         }
         return false;
     }
 }

 static void Main(string[] args)
 {
     Person Person1 = new Person();
     Person1.ID = ;

     Person Person2 = new Person();
     Person2.ID = ;

     bool result = Person1.Equals(Person2);//return true
 }

Object的Equals方法本来是比较两个参数代表的对象是否引自托管堆的同一个对象的地址 如果是这样 则这个例子应该返回false 但实际上它会返回true 因为经过Person类对基类Equals的重写 该方法的行为变成了比较两个对象的ID属性值是否相等 所以结果为true

Equals静态方法

与Equals实例方法有相同的行为 唯一区别是 无法重写 最后注意 如果调用此静态方法比较两个对象 假设被比较的对象是同一种类型且该类型重写了实例Equals方法 则静态Equals方法会按照实例Equals方法的行为来处理比较 比如上个例子中的Person类重写了实例Equals方法 此时如果我们是由静态Equals来比较两个Person类对象 它将根据Person重写的实例Equals来比较两个Person对象的ID是否相等而非比较对象是否引自同一个托管堆的地址

 Person Person1 = new Person();
 Person1.ID = ;

 Person Person2 = new Person();
 Person2.ID = ;

 bool result = object.Equals(Person1,Person2);//return true

如果我们将Person重写的实例Equals方法的代码删除 则结果会返回false

GetHashCode方法

获取对象的哈希码 可重写

GetType方法

获取对象的类型

ToString方法

获取对象的完全限定名称的字符表示 这是该方法的默认行为 可被重写以实现提供类型的详细信息

C# - 学习总目录

上一篇:JAVA基础学习day18--常用工具类


下一篇:为什么要用lock 【readonly】object?为什么不要lock(this)?