前言

  这里说得object是C#语言中的类型object,也是Framework中的System.Object(两者是一个意思)。如其名“面向对象编程”对象就是Object。既然提到面向对象,自然就想到其三大特性:封装、继承、多态。

object其实就一个类

这个最直接的体现就是在visual studio中选中object 关键字然后查看定义(F12),如下图:

object是一个类,他被封装为System.Object。

原来,object就和我们平常写的普通类是没什么区别:构造函数、析构函数、几个静态方法、几个虚方法、GetType、克隆(浅复制)。

正是有了这些静态方法:

A 有了Equals, 所以我们在平时编程的时候 可以直接用object.Equals 去按值比较两个对象

B 有的ReferenceEquals,所以可以直接使用object.ReferenceEquals去按引用地址比较两个对象

正是有了这些虚方法:

 A Equals,所以object对象可以自己去复写判断逻辑

B GetHasCode 同理,故:略

C Tostring 同理,故:略

引入话题:object的三个Equals比较方法

  public static bool Equals(Object objA, Object objB);

  public static bool ReferenceEquals(Object objA, Object objB);

  public virtual bool Equals(Object obj);

  静态方法是提供object的默认比较算法。主要是用于值类型和引用类型比较。这里涉及到另一个知识点:引用类型 和 值类型,这个知识点我接下来的文章会详细分析。Equals这个虚方法为子类提供复写判断算法的途径。

是类,也是一切类型的基类

在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从Object继承的。

1、从上面截图可以看出一个提外信息:object=System.Object

2、我们平时定义一个类时候,并没有显示写出 XXX:object,这个是由.net framework自动帮我们完成的。

3、一个疑问:所有类直接或简洁继承于Object。如上图例子,是否Parent 继承于object 而Child有继承于Parent,所以Child不会直接继承于Object,而是间接通过Parent来继承。如果Child不继承与Parent而是一个单独的类,那么Child类就会直接继承于Object?

在来一张图:

 

因为继承,所以既是没用其他代码,任何类在没有实例化对象之前也可访问来自继承于Object的静态方法。示例话之后就能访问其非静态方法了。

其他零星知识点或经验

1、object是一切类型的基类,所以在程序中我们有时会用object作为方法参数来传递一些复杂、动态、未知的参数。

2、所用object作为数值或者方法类型时候,会涉及到多次的装箱、拆箱。这样的代码效率底而且不安全,所以后面有.Net Framework 提供了泛型可以更高效便捷来处理这个问题

3、所有类有直接或间接继承于System.Object;所有值类型都隐士继承于System.ValueType,而System.ValueType是一个类,故而也继承了System.Object.

4、一个坑:众所周知C#有两个数据类型(值类型和引用类型),他们都属于类。值类型即System.ValueType,所有的具体的值类型种类都继承与她,如int,float 等。所有,对于代码 int 可以访问object基类的静态方法 Equals,以及int 的变量,可以访问基类的方法(因为基类方法是虚方法,在int定义时候以及复写了所有来及基类的方法)。如上理解是通的,我猜也是争取的。但是!F12 看源代码就看不出这层意思,一切都被.net framework 或CLR 特殊处理了。如下图看看int的方法签名吧:

int 其实就是一个struct ,而struct是如何,取不能查看其定义。所有这里只能被动的接受微软的理论知识了

回归主题,总是object就是一个类,也是其他一切类型的基类。他体现了面向对象的三大特性。

再回首:object是什么的更多相关文章

  1. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  2. 再回首,Java温故知新——开篇说明

    不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...

  3. 再回首UML之下篇

    接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...

  4. 再回首UML之上篇

    UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品. UML提供多种类型的模型描述图,当在某 ...

  5. UML——再回首

    概述     在画图的过程中,发现自己还是有好多不懂的地方,对于四大关系理解的不是特别透彻,所以画图的过程中总是"剪不断,理还乱!"再一次整理四大关系,再回首必然丰收~~~ 1.实 ...

  6. [二十六]JavaIO之再回首恍然(如梦? 大悟?)

    流分类回顾 本文是JavaIO告一段落的总结帖 希望对JavaIO做一个基础性的总结(不涉及NIO) 从实现的角度进行简单的介绍 下面的这两个表格,之前出现过 数据源形式 InputStream Ou ...

  7. MySQL数据库再回首

    前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...

  8. oracle再回首

    第一章 Oracle 数据库的使用   一. 数据库相关概念   1 什么是数据库 所谓的数据库其实就是数据的集合.用户可以对集合中的数据进行新增.查询.更新. 删除等操作.数据库是以一定方式储存在一 ...

  9. 再回首,Java温故知新(一):Java概述

    Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...

随机推荐

  1. uwp获取版本信息win10 VersionInfo

    using Windows.System.Profile; Después vamos a agregar una propiedad que va a contener un mensaje con ...

  2. css细节复习笔记——基本视觉格式化

    css包含如此开放.如此强大的一个模型,对于这样一个模型,可以有无数种方法结合应用各种属性,可以得到的效果数不胜数. 基本框 css假定每个元素都会生成一个或多个矩形框,这称为元素框.各元素中心有一个 ...

  3. 546. Remove Boxes

    Given several boxes with different colors represented by different positive numbers. You may experie ...

  4. HTML防止input回车提交表单

    原链接:https://blog.csdn.net/ligang2585116/article/details/44699567 自动提交情况说明: 1.默认情况下,单个输入框,无论按钮的type=& ...

  5. JAVA Double去掉科学计数"E"

    当Double的值很大时,显示的结果会变成带E的科学计数法显示,在报表的数据显示的时候不方便阅读,需要去掉E,将原数据显示 public static void main(String[] args) ...

  6. java异常术语

    .检查性异常: 不处理编译不能通过 .非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台(所有RuntimeException的派生类都是非检查型异常) .非运行时异常: 就是检查性异常4.运 ...

  7. java----session

    什么是session? 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),也就是说他是保存在服务端的.注意:一个浏览器独占一个session对象(默认情况下).因此,在 ...

  8. 学习react教程

    网址收藏: React官网,React的Github,React的中文文档 1.react是什么? React起源于Facebook的内部项目,因为该公司对市场上所有的Javascript MVC框架 ...

  9. MDX常用几种查询对比

    MDX1: SELECT NON EMPTY {Hierarchize( { [Measures].[年初数 的总和], [Measures].[期末数 的总和], [Measures].[本期发生数 ...

  10. Windows运行常用命令(win+R)

    Windows运行常用命令(win+R) 1.calc: 启动计算器 2.notepad: 打开记事本 3.write: 写字板 4.mspaint: 画图板 5.snippingtool:截图工具, ...