一、核心C#(第二部分)

时间:2021-07-04 02:54:13

---恢复内容开始---

预定义数据类型

值类型和引用类型。

1.存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。注意区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。例如:int 是值类型,这表示下面的语句会在内存的两个地方存储值20:

i = 20; j = i;

但考虑下面的代码。这段代码假定已经定义了一个类Vector,Vector是一个引用类型,它有一个int类型的成员变量Value:

Vector x, y; x = new Vector(); x.Value = 30; y = x; Console.WriteLine(y.value); y.Value = 50; Console.WriteLine(x.Value)

要理解的重要一点是在执行这段代码后,,只有一个Vector对戏那个。x和y都指向包含该对象的内存位置。因为x和y是引用类型的变量,声明这两个变量只保留了一个引用---而不会实例化给定类型的对象。两情况下都不会真正的创建对象。要创建对象,就必须使用new关键字,如上所示。因为x和y引用同一对象,所以对x的修改会影响y,反之亦然。因此上面的代码会显示30和50。

C#认可的基本预定义类型并没有内置于C#语言中,而是内置于.Net Framework中。例如,在C#中声明一个int类型的数据时,声明的实际上是.Net结构System.Int32的一个实例。这听起来似乎很深奥,但其意义深远:这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类。例如,要把int i 转换为string,可以编写下面的代码:

string s = i.ToString();

应强调的是,这种便利语法的背后,类型实际上任存储仍为基本类型。基本类型在概念上用.Net结构表示,所以肯定没有性能损失。

一些C#类型的名称与C++和Java类型一致,但其定义不同。

在C#中,int类型总是32位带符号的整数,而在C++中,int是带符号的证书,但其位数取决于平台(在Windows上是32位)。

在C#中,所有数据类型都以与平台无关性的方式定义,以备将来C#和.Net迁移到其他平台上。

namespace EnumStudy { class Program { static void Main(string[] args) { EnumMyStudy es = new EnumMyStudy(); es = EnumMyStudy.优秀; WriteStudy(es); EnumMyStudy es1 = new EnumMyStudy(); es1 = EnumMyStudy.及格; EnumMyStudy es2 = (EnumMyStudy)Enum.Parse(typeof(EnumMyStudy), es1.ToString(), true); Console.WriteLine(es2.ToString() + " " + (int)es2 + " "+ es2); Console.ReadKey(); } static void WriteStudy(EnumMyStudy es) { switch (es) { case EnumMyStudy.优秀: { Console.WriteLine("您的学习成绩为:优秀"); }break; case EnumMyStudy.良好: { Console.WriteLine("您的学习成绩为:良好"); } break; case EnumMyStudy.及格: { Console.WriteLine("您的学习成绩为:及格"); } break; case EnumMyStudy.不及格: { Console.WriteLine("您的学习成绩为:不及格"); } break; case EnumMyStudy.差: { Console.WriteLine("您的学习成绩为:差"); } break; } } } }