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# - 学习总目录

C# - 系统类 - Object类的更多相关文章

  1. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  2. Java中特殊的类——Object类

    Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...

  3. Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类

    Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯.2.面向对象的出现,将复杂的事情简单化.3.面向对象的出现,将之前过程中 ...

  4. Java常用类-Object类

    一.java.lang.Object类 1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Obj ...

  5. Java.lang 包 (包装类、String类、Math类、Class类、Object类)

    Java 的核心 API(Application Programming Interface)是非常庞大的,这给开发者带来了很大的方便. java.lang 包是 Java 的核心类库,它包含了运行 ...

  6. Object类-try-catch-finally-throw-throws-自定义异常

    一.Object类     Object类是最顶端的类,其它类都是它的子类,它的方法可以被继承.如果定义的类没有继承别的类,那它的直接父类就是Object.如果方法参数类型为object类型, 则调用 ...

  7. java学习记录笔记--继承,super,Object类

    继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 ...

  8. JAVASE(十)面向对象:特性之多态性、Object类、代码块、关键字:static、final、父子类执行顺序

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.面向对象的特性之:多态性 多态性的理解:事物的多种形态 1.1 广义上多态性的体现:①方法的重写,重 ...

  9. JDK1.8源码阅读笔记(1)Object类

    JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...

随机推荐

  1. Navicat 导入导出

    当我们对mysql数据库进行了误操作,造成某个数据表中的部分数据丢失时,肯定就要利用备份的数据库,对丢失部分的数据进行导出.导入操作了.Navicat工具正好给我们提供了一个数据表的导入导出功能. 1 ...

  2. uboot环境变量(设置bootargs向linux内核传递正确的参数)

    这是我uboot的环境变量设置,在该设置下可以运行initram内核(从内存下载到nandflash再运行),但是运行nfs根文件系统的时候一直出错,各种错误.查看了很多资料后猜想应该是uboot传递 ...

  3. FZU 2092 收集水晶 dp+bfs

    定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...

  4. Codeforces 14D

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; const i ...

  5. table显示json数据传递

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. [NOIP2011]瑞士轮

    noip2011普及组第3题. 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平 ...

  7. lru cache java

    http://www.acmerblog.com/leetcode-lru-cache-lru-5745.html acm之家的讲解是在是好,丰富 import java.util.LinkedHas ...

  8. [综述]领域特定语言(Domain-Specific Language)的概念和意义

    领域特定语言(Domain Specific Language, DSL)是一种为解决特定领域问题而对某个特定领域操作和概念进行抽象的语言.领域特定语言只是针对某个特定的领域,这点与通用编程语言(Ge ...

  9. POJ 1904 King's Quest 强联通分量+输入输出外挂

    题意:国王有n个儿子,现在这n个儿子要在n个女孩里选择自己喜欢的,有的儿子可能喜欢多个,最后国王的向导给出他一个匹配.匹配有n个数,代表某个儿子和哪个女孩可以结婚.已知这些条件,要你找出每个儿子可以和 ...

  10. cloudstack安装篇3-SELinux配置、NTP时间同步、配置ClouStack软件库

    一.SELinux配置 为了让CloudStack正常工作,我们必须将SELinux设置为permissive.需要在当前系统运行状态下和启动后都能够生效,进行以下配置. 在系统运行状态下的将SELi ...