1.通用类型系统概述
通用类型系统定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:
-
建立一个支持跨语言集成、类型安全和高性能代码执行的框架。
-
提供一个支持完整实现多种编程语言的面向对象的模型。
-
定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。
通用类型系统支持两种一般类别的类型,每一类都细分成子类别:
- 值类型
- 引用类型
作为值类型的变量,每个都有自己的数据副本,因此对一个变量的操作不会影响其他变量。作为引用类型的变量可以引用同一对象;因此对一个变量的操作会影响另一个变量所引用的同一对象。
所有类型都派生自 System.Object 基类型。
类型类别
以下关系图说明了这几种类型是如何相关的。注意,类型的实例可以只是值类型或自描述类型,即使这些类型有子类别也是如此。
值和对象
值是数据的二进制表示形式,类型提供了一种解释该数据的方式。值类型直接以类型数据的二进制表示形式存储。引用类型的值是表示该类型的数据的位序列的位置。
每个值都有一个准确的类型,完全定义了值的表示形式和针对值定义的操作。自描述类型的值称为对象。通过检查值,总是可以确定对象的准确类型,但却不能这样处理值类型和指针类型。值可以有多种类型。一种实现某一接口的类型,其值也是该接口类型的值。同样,从某一基本类型派生的类型,其值也是该基本类型的值。
类型和程序集
运行库使用程序集来定位和加载类型。程序集清单包含运行库用来解析在程序集范围内进行的所有类型引用的信息。
运行库中的类型名称有两个逻辑部分:程序集名称和程序集内类型的名称。有着相同名称但位于不同程序集内的类型被定义为两种不同的类型。
程序集在开发人员所看到的名称范围与运行库系统所看到的名称范围之间提供了一致性。开发人员在程序集的上下文中创作类型。开发人员正在构建的程序集内容确立了在运行时的可用名称范围。
类型和命名空间
从运行库的角度看,命名空间只是类型名称的一个集合。特定语言所具有的构造和相应的语法可帮助开发人员构成类型的逻辑组,但运行库在绑定类型时并不使用这些构造。因此,Object 和String 类都是System 命名空间的一部分,但运行库只识别每个类型的完整名称,它们分别为 System.Object 和 System.String。
2.C#类型体系包含下列几种类别
- 值类型 Value Type
- 结构 struct
- 数值类型 (Numeric)
- 整型(Integer)
- sbyte
- byte
- char
- short
- ushort
- int
- uint
- long
- ulong
- 浮点型(Float)
- float
- double
- decimal
- 整型(Integer)
- 布尔型 bool
- 用户定义的结构
- 数值类型 (Numeric)
- 枚举 enum
- 结构 struct
- 引用类型
- class
- interface
- delegate
- object
- string
- 指针类型
3.C#内置类型表(基元类型)
- bool System.Boolean
- byte System.Byte
- sbyte System.SByte
- char System.Char
- decimal System.Decimal
- double System.Double
- float System.Single
- int System.Int32
- uint System.UInt32
- long System.Int64
- ulong System.UInt64
- object System.Object
- short System.Int16
- ushort System.UInt16
- string System.String
除了 object 和 string 外,表中的所有类型均称为简单类型。
C# 类型的关键字及其别名可以互换。例如,可使用下列两种声明中的一种来声明一个整数变量:
int x = 123; System.Int32 x = 123; |
若要显示任何 C# 类型的实际类型,请使用系统方法 GetType()。例如,下列语句显示了表示 myVariable 类型的系统别名:
Console.WriteLine(myVariable.GetType()); |
还可使用 typeof 运算符。