注:以下笔记全摘录自CLR via C# 3

1、所有类型都从System.Object派生:”运行时“要求每个类型最终都从System.Object派生。

2、System.Object提供了四个公共实例方法:

(1) Equals :如果两个对象具有相同的值,就返回true。

(2) GetHashCode

(3) ToString:该方法默认返回类型的完整名称(this.GetType().FullName)。然而,我们经常重写这个方法,使它返回一个String对象,其中包含对象状态的一个表示。例如,核心类型(比如Boolean和Int32)重写了这个方法,返回他们值的一个字符串表示。

(4) GetType:返回Type派生的一个对象的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合使用,从而获取与对象的类型有关的元数据信息。

3、System.Object的受保护方法:

(1) MemberwiseClone:这个非虚方法能创建一个类型的新实例,并将新对象的实例字段设与this对象的实例字段完全一致。返回的是对新实例的一个引用。

(2) Finalize:在垃圾回收器判断对象应该被作为垃圾回收之后,在对象的内存被实际回收之前,会调用这个虚方法。

4、CLR要求所有对象都用new操作符来创建。以下是new操作符所做的事情。

(1) 它计算类型及其所有基类型(一直到System.Object,虽然它没有定义自己的实例字段)中所有字段需要的字节数。堆上每个对象都需要一些额外成员,”类型对象指针“(type object pointer)和“同步块索引”(sync block index)。这些成员由CLR用于管理对象。这些额外成员的字节数会计入对象大小。

(2)它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零(0)。

(3)它初始化对象的”类型对象指针“和”同步块索引“成员。、

(4)调用类型的实例构造器,向其传入在对new的调用中指定的任何实参。

5、顺便说一句,没有和new操作符对应的delete操作符;换言之,没有办法显示释放为一个对象分配的内存。

6、CLR最重要的特性之一就是类型安全性。(其它的重要特性呢?)

7、使用C#  的is 和as操作符来转型。

(1)is :用于检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或false。注意:is操作符永远不会抛出异常。如果引用对象是null,is操作符总是返回false,因为没有可检查其类型的对象。

is操作符通常像下面这样使用(放到if判断里面

if( o is Employee){

Employee e=(Employee ) o;

//在剩下的代码用e

}

这段代码,CLR会检查两次对象的类型;is 操作符首先核实o是否兼容于一个Employee类型。如果是,那么在if语句内部执行时,CLR再次核实o是否引用一个Employee。(类型检查增加了安全性,但是有性能损失)

(2)as:简化is的写法,同时提升性能(只校验一次)。as的工作方式和强制类型转换一样,只是它永远不会抛出异常,如果对象不能转型,结果就为null。所以,正确的做法是检查最终生成的引用是否为null。如果企图直接使用最终生成的引用,会抛出一个System.NullReferenceException异常,以下代码对此进行了演示:

 Object o = new Object();    //新建一个Object对象
Employee e = o as Employee; // 将o转型为一个Employee
//上述操作会失败,不会抛出异常,但e会被设为null
e.ToString(); //访问e会抛出一个NullReferenceException异常

8、命名空间和程序集

命名空间(namespace)用于对相关的类型进行逻辑性分组,开发人员使用命名空间方便的定位一个类型。

在C#中,namespace的作用只是告诉编译器为源代码中出现的每个类型名称附加空间名称前缀,减少程序员的打字量。

命名空间和程序集的关系:

注意,命名空间和程序集不一定是相关的。特别是,同一个命名空间中各个类型可能是在不同程序集中实现的。例如,System.IO.FileStream类型是在MSCorLib.dll程序集中实现的,儿System.IO.FileSystemWatch类型是在System.dll程序集中实现的。

在一个程序集中,也可能包含不同命名空间中的类型。例如,System.Int32和System.Text.StringBuilder类型都在MSCorbLic.dll中。

C#基础巩固之基础类型的更多相关文章

  1. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  2. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  3. C#_02.12_基础二_.NET类型存储和变量

    C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...

  4. Java基础教程:枚举类型

    Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...

  5. Python基础之Python语言类型

    编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言 编译和解释的区别是什么? 编译器把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样 ...

  6. GO语言基础(结构+语法+类型+变量)

    GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量       Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...

  7. MYSQL、PHP基础、面向对象基础简单复习总结

    一.MYSQL         1.配置MySql                 第一步安装服务器(apache).                 第二部安装MySql界面程序         2 ...

  8. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  9. [.net 面向对象编程基础] (3) 基础中的基础——数据类型

    [.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...

  10. [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换

    [.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...

随机推荐

  1. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

  2. java io系列05之 ObjectInputStream 和 ObjectOutputStream

    本章,我们学习ObjectInputStream 和 ObjectOutputStream ObjectInputStream 和 ObjectOutputStream 介绍 ObjectInputS ...

  3. java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...

  4. 4、JPA-EntityManager.merge()

    EntityManager#merge merge() 用于处理 Entity 的同步.即数据库的插入和更新操作 merge的几种情况 1. 若传入的是一个临时对象 package jpa.test; ...

  5. 13.模板方法(Template Method)

    无处不在的Template Method     如果你只想掌握一种设计模式,那么它就是Template Method!动机(Motivate):    变化 -----是软件设计的永恒主题,如何管理 ...

  6. Linux系统中errno对应的中文意思 errno.h

    /usr/include/asm/errno.h #define EPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* No s ...

  7. HDU 1016(素数环 深搜)

    题意是说对一个长度为 n 的数环进行排列,使得相邻两数的和为素数,按从小到大的顺序依次输出. 因为是环,所以总能调整成以 1 为序列首输出.用深度优先搜索的方法即可.在判断素数时由于 n 小于 20, ...

  8. 用过企业微信APP 后,微信接收不到消息,解决方案

    用过企业微信APP 后,微信接收不到消息的,怎么办? 请打开企业微信,找到:我----设置----新消息通知----仅在企业微信中接收消息

  9. STC等单片机一开机就停电模式烧写程序办法

    为了测试一个低功耗程序,程序一开机就进入停机模式,结果刷不回来了,经过两个小时的试验,必须4个线同时插拔vcc,rxd,txd,gnd.如果只断开vcc是不行的.

  10. UVAlive 6697 Homework Evaluation

    借鉴了别人的博客啊,自己写写给以后的自己看吧 给出两个字符串,用第二个字符串去匹配第一个字符串,可以对第二个字符串进行删除或插入操作,一位匹配成功得8分失败-5分,如果插入或删除,对于连续插入或删除m ...