C#基础巩固之基础类型
注:以下笔记全摘录自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#基础巩固之基础类型的更多相关文章
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- C#_02.12_基础二_.NET类型存储和变量
C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...
- Java基础教程:枚举类型
Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...
- Python基础之Python语言类型
编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言 编译和解释的区别是什么? 编译器把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样 ...
- GO语言基础(结构+语法+类型+变量)
GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量 Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...
- MYSQL、PHP基础、面向对象基础简单复习总结
一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序 2 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
- [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换
[.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...
随机推荐
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- webserver nginx / https / upstream
s nginx server_name 配置 https://segmentfault.com/q/1010000008426747?_ea=1647456 问题:我的host还没有域名,server ...
- 安装saltstack使用的shell
sed -i 's/^#//g' /etc/yum.repos.d/centos6.8.repo sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d ...
- 【转】第8章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Java中Sax解析XML
SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式:这种解析方法速度快.占用内存少,但是它需要应用程序自己处理 ...
- CentOS 安装最新版本 Git
查看默认 yum 源的 git版本 # 安装 yum install -y git # 查看版本 git version # git version 1.8.3.1 参看官网,CentOS 安装新版本 ...
- JAVA核心技术I---JAVA基础知识(类的继承)
一:基本概念同C++一致 二:继承演示 .将共同点提取出来,即形成了父类/基类/超类 –Parent class/Base class/Super class .而其他类则自动成为子类/派生类 –Ch ...
- Ado.NET基础必备
一.SqlConnection对象 第一次需要连接数据库时要和服务器握手,解析连接字符串,授权,约束的检查等等操作,而物理连接建立后,这些操作就不会去做了(默认使用了连接池技术). SqlConnec ...
- Redis_集群_主从模式_哨兵模式
1.主从模式 2.哨兵模式
- python-常用数据类型
九 基本数据类型 什么是数据?为何要有多种类型的数据? #数据即变量的值,如age=18,18则是我们保存的数据. #变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的 ...