`

C#的类型系统

阅读更多
一.C#的统一类型系统
1.C#的类型系统是统一的,java的类型系统分为:基本类型(原生类型)和类类型,而C#的所有类型直接或间接地从object类类型派生而来,从类型系统上来看比java更OO。
2.C#的类型分为三类:
(1)值类型,一个值类型或是结构类型或是枚举类型
(2)引用类型
(3)指针类型
值类型与
引用类型的不同在于:值类型的变量直接包含其数据而引用类型的变量存储对其数据的引用(reference)后者称为对象(object)。对于引用类型两个变量可能引用同一个对象因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。
二。值类型
1.所有值类型从类System.ValueType隐式继承后者又从类object继承。任何类型都不可能从值类型派生。

2.
所有值类型都隐式声明一个称为默认构造函数(default constructor)的公共无参数实例构造函数。默认构造函数返回一个零初始化实例它就是该值类型的默认值(default value)

<!---->·         <!---->对于所有simple-types默认值是将其所有位都置零的位模式所形成的值

<!---->o        <!---->对于sbytebyteshortushortintuintlongulong默认值为0

<!---->o        <!---->对于char默认值为'\x0000'

<!---->o        <!---->对于float默认值为<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="F">0.0f</st1:chmetcnv>

<!---->o        <!---->对于double默认值为0.0d

<!---->o        <!---->对于decimal默认值为<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="m">0.0m</st1:chmetcnv>

<!---->o        <!---->对于bool默认值为false

<!---->·         <!---->对于enum-typeE默认值为0

<!---->·         <!---->对于struct-type默认值是通过将所有值类型字段设置为它们的默认值、将所有引用类型字段设置为null而产生的值。

3.C#中有所谓的简单类型概念(simple type),类似于java的基本类型,但又不同,C#的简单类型本质上都是结构类型(预定义集合的结构类型),所以还是值类型,从System.ValueType继承而来。C#的简单类型包括:

保留字<o:p></o:p>

化名的类型<o:p></o:p>

sbyte<o:p></o:p>

System.SByte<o:p></o:p>

byte<o:p></o:p>

System.Byte<o:p></o:p>

short<o:p></o:p>

System.Int16<o:p></o:p>

ushort<o:p></o:p>

System.UInt16<o:p></o:p>

int<o:p></o:p>

System.Int32<o:p></o:p>

uint<o:p></o:p>

System.UInt32<o:p></o:p>

long<o:p></o:p>

System.Int64<o:p></o:p>

ulong<o:p></o:p>

System.UInt64<o:p></o:p>

char<o:p></o:p>

System.Char<o:p></o:p>

float<o:p></o:p>

System.Single<o:p></o:p>

double<o:p></o:p>

System.Double<o:p></o:p>

bool<o:p></o:p>

System.Boolean<o:p></o:p>

decimal<o:p></o:p>

System.Decimal<o:p></o:p>

这些简单类型都是System命名空间中预定义结构类型的别名(ruby的别名实在贴心)

4.枚举类型,枚举类型是具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为 bytesbyteshortushortintuintlongulong。如果没有为枚举类型中的元素指定基础值,默认是从0开始逐一递增。

三。引用类型

1.引用类型是类类型、接口类型、数组类型或委托类型。

2.类类型:包括预定义的类类型和用户通过class关键字的自定义类类型

3.对象类型:

object类类型是所有其他类型的最终基类。C#  中的每种类型都是直接或间接从object类类型派生的。<o:p></o:p>

关键字object只是预定义类System.Object的别名。

4.string类型:
string类型是直接从object继承的密封类类型。关键字string只是预定义类System.String的别名.
5.接口类型:
与java中的接口概念基本一致,可以变相实现多重继承。

类类型<o:p></o:p>

说明<o:p></o:p>

System.Object<o:p></o:p>

所有其他类型的最终基类。<o:p></o:p>

System.String<o:p></o:p>

C#  语言的字符串类型。<o:p></o:p>

System.ValueType<o:p></o:p>

所有值类型的基类。<o:p></o:p>

System.Enum<o:p></o:p>

所有枚举类型的基类。<o:p></o:p>

System.Array<o:p></o:p>

所有数组类型的基类。<o:p></o:p>

System.Delegate<o:p></o:p>

所有委托类型的基类。<o:p></o:p>

System.Exception<o:p></o:p>

所有异常类型的基类。<o:p></o:p>


四。装箱、拆箱概念
1.装箱和拆箱的概念是C#  的类型系统的核心。它在 value-typereference-type 之间的架起了一座桥梁,使得任何 value-type 的值都可以转换为 object 类型的值,反过来转换也可以。
2.装箱:
装箱转换允许将value-type隐式转换为reference-type
装箱的行为可以用下面的过程描述:

sealed class T_Box: System.ValueType
{
T value;

public T_Box(T t) {
     value = t;
}
}<o:p></o:p>

分配一个对象实例然后将value-type的值复制到该实例中
3.拆箱:
拆箱转换允许将reference-type显式转换为value-type
从对象boxvalue-typeT的拆箱转换相当于执行表达式((T_Box)box).value
分享到:
评论
1 楼 baby_cz 2008-10-23  
好文, 顶一个

相关推荐

    C#程序员参考手册(pdf)

    C#程序员参考手册 作者:Grant Palmer 著,康博 译 出版社:清华大学出版社 出版时间:2002年09月第1章 编译和程序结构 第2章 C#类型系统 第3章 运算符 第4章 程序流程和异常处理 第5章 局部变量...

    C# 获取PC机主板,CPU,硬盘,MAC等等信息、操作系统类型及版本

    C# 获取PC机主板,CPU,硬盘,MAC、用户名,机器名,操作系统类型等等

    TravelIS C# 旅行管理系统

    (3)C# 类库程序项目TravelLib:其中TravelData类用于实现数据访问接口,其余类型则用于实现旅行社管理系统的基本业务逻辑。 2、程序中主要的类型及其功能说明请参看《C#面向对象程序设计》教材内容。 3、系统...

    C#图书管理系统

    C#图书管理系统网页 .NET Framework 3.5 前段时间自己做的一个winform+sqlServer程序,图书管理系统(有注释),C#语言实现(三层架构)。实现图书管理(的借阅、归还、续借、损坏赔偿);读者管理;图书类型管理;...

    C# KTV 点歌系统项目源码含数据库

    【工控老马出品,必属精品,亲测校正,...资源名:C# KTV 点歌系统项目源码含数据库 资源类型:程序源代码 源码说明: 用C#写的KTV点歌系统 包含完整代码和数据库 适合学习借鉴 适合人群:新手及有一定经验的开发人员

    c#图书管理系统

    c#图书管理系统+数据库 根据功能要求的说明创建下列数据表: (1)图书信息表 图书信息表包括以下字段: 图书编号、图书类别、书名、作者、出版社、出版日期、价格、是否可借标志。 (2)图书类别表 图书类别表...

    问卷调查系统(c#)

    用c#写的问卷调查系统,包括问卷的创建,题目创建,选项的创建。前台根据问卷题目类型动态生成页面

    C#获取系统基本属性信息

    C#获取系统基本属性信息

    asp.net人才招聘管理系统完整版C#源码

    源码说明:本系统是使用MS.NET平台中的ASP.NET开发基于B/S体系结构的Web应用程序,在Microsoft Visual Studio .NET 环境下,使用 C# 编程语言并结合 SQL Server 2008r2 数据库开发的一套教师招聘管理系统。...

    酒店管理系统C#

    c#实现的酒店管理系统,里面包含了数据库文件,简易酒店管理系统源码 二、源码特点 1、采用WinFrom程序设计开发的酒店管理系统; 2、应用到标准的三层技术,多个视图工具控件; 二、功能介绍 用户可根据自己的...

    C#获取系统ICON图标示范

    本源码展示了4种不同方法获取Windows系统的各种ICON图标,包括文件夹、不同类型文件、程序文件的ICON、带特定图标的文件夹(如:收藏夹)等等的图标都能提取。[源码附带详细注释]

    C#版本公文流转系统_OA系统

    是一个网站类型的 公文流转系统 C#.net开发,免费为大家贡献。

    c#winform酒店管理系统,献上完整版C#源码,毕业设计

    功能描述: ...支持单独查看指定类型房间 7.完善预订功能完善 8.完善顶部菜单指向链接 9.换房时,如换房原因为“损坏维修”,则房间状态自动更换为维修状态 10.完善预订、顾客信息页面的分页代码

    c# Windows系统操作方法汇总

    ▲资源包括c#对操作系统的各种操作方法▲ ▲设置桌面背景▲ ▲设置系统时间▲ ▲设置屏幕分辨率▲ ▲设置鼠标样式▲ ▲设置任务栏时间显示方式▲ ▲进入系统前弹出信息▲ ▲内存使用状态 ▲CPU使用率▲ ▲键盘钩子...

    C#获取系统版本、内存大小、显卡类型、cpu型号源代码

    C#获取系统版本、内存大小、显卡类型、cpu型号

    C# 判断客户端的设备类型

    要想让网站适配PC和手机设备,首先要能做出准确的判断。HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,可以通过User-Agent来判断客户端的设备。

    c#物资流通管理系统源码

    6.1.7 操作类型表(PaperType) 18 6.1.8 系统日志表(RecordList) 19 6.1.9 系统通知表(SystemTest) 19 6.2 各表之间的逻辑关系图 19 第七章 编码与实现 21 7.1 NET平台技术综述 21 7.1.1 MICROSOFT.NET...

    C#+SQLServer文档管理系统

    这样,可以将不同类型的工作文件导入到文档管理系统中进行操作,还可以在文档管理系统中打开任意类型的文件以进行修改,并可以将修改后的文件导出到其他路径中。通过文档管理系统可以快速的查找指定的工作文件,提高...

    C#学生信息数据库管理系统.pdf

    (2)权限管理:为了很好的保证系统的安全性,学校相关负责人可以设置不同类型的 人员的权限。 (3)学生档案管理:学生档案的数量十分庞大,教务管理人员进行新生入学的档案录 入及更改。其中包括学生个人信息的...

Global site tag (gtag.js) - Google Analytics