再回首:object是什么
前言
这里说得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是什么的更多相关文章
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- 再回首,Java温故知新——开篇说明
不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...
- 再回首UML之下篇
接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...
- 再回首UML之上篇
UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品. UML提供多种类型的模型描述图,当在某 ...
- UML——再回首
概述 在画图的过程中,发现自己还是有好多不懂的地方,对于四大关系理解的不是特别透彻,所以画图的过程中总是"剪不断,理还乱!"再一次整理四大关系,再回首必然丰收~~~ 1.实 ...
- [二十六]JavaIO之再回首恍然(如梦? 大悟?)
流分类回顾 本文是JavaIO告一段落的总结帖 希望对JavaIO做一个基础性的总结(不涉及NIO) 从实现的角度进行简单的介绍 下面的这两个表格,之前出现过 数据源形式 InputStream Ou ...
- MySQL数据库再回首
前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...
- oracle再回首
第一章 Oracle 数据库的使用 一. 数据库相关概念 1 什么是数据库 所谓的数据库其实就是数据的集合.用户可以对集合中的数据进行新增.查询.更新. 删除等操作.数据库是以一定方式储存在一 ...
- 再回首,Java温故知新(一):Java概述
Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...
随机推荐
- 查找 SQL SERVER 所有表记录数
-- 所有表的记录数 SELECT a.name, b.rowsFROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.idWHERE ...
- UDP实现一个简易的聊天室 (Unity&&C#完成)
效果展示(尚未完善) UDP User Data Protocol 用户数据报协议 概述 UDP是不连接的数据报模式.即传输数据之前源端和终端不建立连接.使用尽最大努力交付原则,即不保证可靠交付. 数 ...
- WM_COPYDATA+BHO+Qt实现进程间通信
最近项目有一个需求:点击网页上某个按钮,通知Qt客户端.网页相关操作使用了BHO,BHO与Qt通信通过WB_COPYDATA,为什么这么麻烦呢,因为项目正好用到了BHO,可能还有其他方式,能直接通过网 ...
- .NET处理HTTP请求
第一种:使用HttpWebRequest string result = ""; HttpWebRequest request = (HttpWebRequest)WebReque ...
- asp.net web 应用站点支持域账户登录
1.IIS站点应用程序池设置管道模式为classic模式,identity设置为管理员账户 2.站点验证设置,只打开windows验证,其他都关闭 3.应用程序配置web.config配置如下: &l ...
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- Django的views视图系统
老师的博客:http://www.cnblogs.com/liwenzhou/articles/8305104.html 以看老师的博客为主 一个视图函数(类),简称视图,是一个简单的Python 函 ...
- 第四界css大会 黑魔法-css网格背景、颜色拾取器、遮罩、文字颜色渐变、标题溢出渐变等
1.css网格背景 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- JAVA判断质数
好久没写了,今天做题有点忘了,不会写了.重新做了一份,整理出来. import java.util.Scanner; public class 判断质数 { public static boolean ...
- BZOJ 1579--道路升级(DP&最短路)
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2206 Solv ...