`

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#第二章 深入C#类型参考答案.zip|北大青鸟C#第二章 深入C#类型参考答案.zip

    在深入学习C#编程语言的过程中,第二章通常会聚焦于C#类型系统,这是理解C#编程基础的关键。北大青鸟作为知名的IT培训机构,其课程设计严谨,旨在帮助学员掌握扎实的编程技能。"北大青鸟C#第二章 深入C#类型参考答案...

    微软中国C#入门PPT

    C#类型系统: * 引用类型(class) * 值类型(Struct) * 分配方式:动态、堆、静态 * 缺省值:Null、零值化 * 引用拷贝、值拷贝和变量地址 预定义类型: * 引用类型:object, string * 有符号的整数:sbyte, ...

    C#语言规范5.0中文版(目录版)

    C#类型系统是本规范中非常重要的部分,它包括值类型和引用类型。值类型又分为简单类型、枚举类型、可以为null的类型,以及结构类型;引用类型包括类类型、对象类型、接口类型、数组类型、委托类型等。 6. 类和对象...

    c#通讯录系统 c#通讯录系统

    它的语法简洁明了,且支持.NET框架,这为开发各种类型的应用程序提供了强大的支持,包括我们的通讯录系统。 通讯录系统的核心功能包括添加、编辑、删除和查找联系人。在C#中,这些功能可以通过面向对象的设计模式来...

    理解 C#值类型与引用类型 (2).docx

    在C#编程中,了解值类型(Value ...学习更多关于C#类型系统的知识,可以参考《CLR via C#》等专业书籍,以及官方文档和权威在线资源,如MSDN。这些资料能帮助开发者深入理解C#的内存管理、类型系统以及性能优化策略。

    C#学习(微软原版2021).pdf

    C#类型系统分为值类型和引用类型,其中值类型直接包含数据,而引用类型存储对数据的引用。 ### 类型和程序构建基块 在类型和程序构建基块部分,我们将会学习C#的基本数据类型如int、bool、char等,以及如何将这些...

    C# 类型基础

    C#是一种面向对象的编程语言,它的类型...综上所述,C#类型系统是理解和编程的基础,涵盖了数据类型、内存管理、异常处理、IL指令集以及命名空间等众多知识点。对于初学者而言,掌握这些概念是进行有效编程的先决条件。

    c#管理系统系统

    在开发企业级应用,尤其是管理系统时,C#以其丰富的库支持、严谨的类型检查以及高效的代码执行而备受青睐。 1. 高校教师档案管理系统:这个系统主要负责高校教师的个人信息、教学资料、学术成果等档案的存储、检索...

    C#商品销售管理系统

    C#是微软公司推出的一种面向对象的、类型安全的、现代化的编程语言,广泛应用于Windows平台的软件开发。其语法简洁明了,支持泛型、自动垃圾回收、异常处理、多线程等特性,特别适合构建大型、复杂的商业应用系统。 ...

    C#在线考试系统代码

    C#作为.NET框架的核心编程语言,因其简洁的语法和强大的功能,常被用于开发各种类型的应用程序,其中包括教育领域的在线考试系统。本篇文章将详细探讨一个基于C#和WinForm界面实现的在线考试系统,旨在帮助读者理解...

    C#语言基础理解.doc

    装箱和拆箱是C#类型系统的核心,可以轻松地实现值类型和引用类型的相互转换。 学习C#语言基础是非常重要的,因为它是学习C#语言的基础。只有掌握了C#语言基础,才能更好地学习C#语言的高级知识和应用。 在学习C#...

    c#试卷分析管理系统

    C#是一种面向对象的、类型安全的编程语言,由微软公司推出,特别适合构建Windows平台上的应用程序。在试卷分析管理系统中,C#的强大功能体现在以下几个方面:它提供了丰富的类库,便于快速开发;支持.NET框架,使得...

    C#语言规范5.0

    C#类型系统是强大的,并在规范中占据了相当的篇幅。其中包括了值类型(如结构和枚举)和引用类型(如类、数组和委托)。特别地,规范详细讲解了装箱与拆箱的概念,这允许值类型的实例可以在运行时被转换为object类型...

    C++和C#的类型转换

    在C#中,System.IntPtr是一个指针类型,用于表示一个系统资源的句柄。 2. Byte(unsigned char) ---- System.Byte 在C++中,Byte是一个无符号字符类型,在C#中,System.Byte是一个无符号字节类型。 3. SHORT(short...

    C#学生选课系统

    1. **C#基础**:作为开发语言,C#是微软公司推出的面向对象的编程语言,具有类型安全、垃圾回收等特点。在学生选课系统中,C#用于编写后端逻辑、数据库交互、用户界面等功能模块。 2. **Windows Forms或WPF**:这两...

    C# 管理系统源码 8套

    C#是一种面向对象的、类型安全的编程语言,由微软公司开发并广泛应用于Windows平台的软件开发,尤其是.NET框架下的应用程序。 管理系统源码可能涵盖了诸如用户管理、权限控制、数据存储、业务逻辑处理等多个方面,...

    入门-C#指南中文.pdf

    指南还包含了C#类型系统的介绍,这是一个涵盖了基本类型、类、元组、接口等元素的系统。这些概念是理解C#中数据和行为的基础。同时,也探讨了泛型、委托、事件等高级特性,这些都是C#语言的核心组成。 C#指南不仅...

Global site tag (gtag.js) - Google Analytics