【C#语言规范版本5.0学习】1.2类型和变量

C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type)

值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,引用类型称为对象。

对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。

对于值类型,每个变量都有它们自己的数据副本(除 ref 和 out 参数变量外),因此对一个变量的操作不可能影响另一个变量。

C# 的值类型进一步划分为简单类型 (simple type)、枚举类型 (enum type)、结构类型 (struct type) 和可以为null 的类型 (nullable type)

C# 的引用类型进一步划分为类类型 (class type)、接口类型 (interface type)、 数组类型 (array type) 和委托类型 (delegate type)

C# 类型系统的概述


八种整型类型分别支持 8 位、16 位、32 位和 64 位整数值的有符号和无符号的形式。

两种浮点类型:float 和 double,分别使用 32 位单精度和 64 位双精度的IEEE754 格式表示。

decimal 类型是128 位的数据类型,适合用于财务计算和货币计算。

C# 的 bool 类型用于表示值为 true 或 false 的布尔值。

在 C# 中,字符和字符串处理使用 Unicode 编码。char 类型表示一个 UTF-16 编码单元,string 类型表示 UTF-16 编码单元的序列。

C# 的数值类型

 


 C# 程序使用类型声明 (type declaration) 创建新类型。类型声明指定新类型的名称和成员。

 在 C# 类型分 类中,有五类是用户可定义的:类类型 (class type)、结构类型 (struct type)、接口类型 (interface type)、 枚举类型 (enum type) 和委托类型 (delegate type)

 


C# 支持由任何类型组成的一维和多维数组。与以上列出的类型不同,数组类型不必声明就可以使用。实际上,数组类型是通过在某个类型名后加一对方括号来构造的。

例如,int[] 是一维 int 数组, int[,] 是二维 int 数组,int[][] 是一维 int 数组的一维数组。

可以为 null 的类型也不必声明就可以使用。对于每个不可以为 null 的值类型 T,都有一个相应的可以为 null 的类型 T?,该类型可以容纳附加值 null。

例如,int? 类型可以容纳任何 32 位整数或 null 值。

C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类。

引用类型的值都被视为 object 类型,被简单地当作对象来处理。

值类型的值则通过对其执行装箱和拆箱操作按对象处理。

下面的示例将 int 值转换为 object,然后又转换回 int。 

using System;
class Test
{
static void Main() {
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
}
}

当将值类型的值转换为类型 object 时,将分配一个对象实例(也称为“箱子”)以包含该值,并将值复制到该箱子中。

反过来,当将一个 object 引用强制转换为值类型时,将检查所引用的对象是否含有正确的值类型,如果有,则将箱子中的值复制出来。

 C# 的统一类型系统实际上意味着值类型可以“按需”转换为对象。因为统一,所以使用类型 object 的通用库可以与引用类型和值类型一同使用。


C# 中存在几种变量 (variable),包括字段、数组元素、局部变量和参数。(定义的变量种类

变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量,如下表所示。

 

posted @ 2021-01-22 12:51  TechSingularity  阅读(108)  评论(0编辑  收藏  举报