《Inside C#》笔记(三) 数据类型

数据类型系统是一门编程语言的骨干。.NET体系的言语使用统一的数据类型系统CTS(Common
Type System)。全体的数据类型都继承自System.Object。

 

一 值类型和引用类型

a)面向对象语言最分明的性状便是:万物皆对象。但早期的面向对象语言却因为那或多或少设有品质上的题材。因为其余变量都要在堆上分配。CTS通过将数据类型分为值类型和引用类型化解了这些题材。

 

b) 值类型

值类型包蕴基元类型(Primitive
Type,包罗int,double,byte等)、枚举和结构体;这么些项目标变量会保留在栈(stack)上;不可以为空;操作数据时,直接操作栈上的值。

 

c)引用类型

引用类型包罗类、数组、委托、接口;那类数据会保存在堆(Heap)上;能够为空;引用类型实际上是项目安全的指针,类型安全意味着指针一定会指向堆上已经存在的目标,操作数据时,操作的是该指针。

 


 

二 装箱和拆箱

装箱和拆箱在保险“万物皆对象”的前提下,做到了对质量的晋升。

a)
装箱就是将三个值类型的变量转换为引用类型;拆箱则恰恰相反。这一定义最关键的地方在于:“它使三个事物唯有在需借使目的的时候才作为靶子”。比如七个Int32类型的变量,保存在栈上,但它可以传递给别的从Sytem.Object衍生的对象,而其实它只是一个封存在栈上、占用了五个字节的值。

b)
值类型有广大种,但引用类型可以认为唯有System.Object一种,所以装箱的时候,值类型的转移目的是通晓的,在将值类型赋值给引用类型时会自动举行装箱。但拆箱时,须要人工钦赐要将引用类型转换为哪一种值类型。

 


 

三 System.Object

C#,System.Object是装有目标的基类,全部目的都默许继承了System.Object类的措施。System.Object类具有如下多少个方法:

public方法:

 C# 1

Equals:相比较变量是不是等于,要是四个变量引用同四个目的,那多少个变量相等;对于值类型来说,假若类型和值都相等,则觉得变量相等。

GetHashCode:总计对象的哈希值时用。

GetType:反射时,用来博取对象的门类。

ToString:默许重返对象的称号。

ReferenceEquals:本书相比较早,那性情格应该是新兴版本的.NET中丰硕的,用于比较是或不是引用同3个对象。

protected方法:

 C# 2

Finalize:GC举行垃圾回收时用到。

MemberwiseClone:用于开展浅拷贝。

 

四 CTS类型与C#项目标对应

 C# 3

 


 

五 类型转换

基于里氏转换原则,可以接纳派生类来替换基类。假使假定基类为Employee,派生类为ContractEmployee:

a) 向上转换(upcast)
将派生类赋值给基类时展开发展转换,那种转移可机关举行(隐式转换)。

Employee e=new ContractEmployee();

b) 向下更换(downcast)
将基类转换为派生类时举办的是向下更换,必要显式转换。

 C# 4

这么的写法编译能够透过。唯有在运作时才方可肯定转换是不是可以成功,倘使转换失利,会抛出System.InvalidCastException万分。

 此外,还足以应用as关键字展开转移,使用那种措施就行向下更换时,运营时转换失利不会报错,会赋空值,所以要注意搞好非空判断。

相关文章