C#类型系统
既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#类型系统。在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么。尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序。
值类型
各种值类型总是含有相应该类型的一个值。C#迫使你初始化变量才能使用它们进行计算-变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你。每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在相同的内存位置,但现在有两个对象指向了它(引用它)。C#的值类型可以归类如下:
◆简单类型(Simple types )
◆结构类型(struct types)
◆枚举类型(Enumeration types)
1.简单类型
在C#中出现的简单类型共享一些特性。第一,它们都是.NET系统类型的别名。第二,由简单类型组成的常量表达式仅在编译时而不是运行时受检测。最后,简单类型可以按字面被初始化。以下为C#简单类型归类:
◆整型
◆布尔型
◆字符型 (整型的一种特殊情况)
◆浮点型
◆小数型
2.结构类型
一个结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。尽管列出来的功能看起来象一个成熟的类,但在C#中,结构和类的区别在于结构是一个值类型,而类是一个引用类型。与C++相比,这里可以用结构关键字定义一个类。
使用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。你可以节省内存,因为没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万个对象的数组时,这会引起极大的差异。
包含一个命名为IP的简单结构,它表示一个使用byte类型的4个字段的IP地址。我不包括方法等,因为这些工作正如使用类一样,将在下一章有详细的描述。
定义一个简单的结构
- using System;
- struct IP{
- public byte b1,b2,b3,b4;
- }
- class Test{
- public static void Main(){
- IP myIP;
- myIP.b1 = 192;
- myIP.b2 = 168;
- myIP.b3 = 1;
- myIP.b4 = 101;
- Console.Write("{0}.{1}.",myIP.b1,myIP.b2);
- Console.Write("{0}.{1}",myIP.b3,myIP.b4);
- }
- }
3.枚举类型
当你想声明一个由一指定常量集合组成的独特类型时,枚举类型正是你要寻觅的。最简单的形式,它看起来可能象这样:enum MonthNames { January, February, March, April };
因我惯用缺省设置,故枚举元素是int型,且第一个元素为0值。每一个连续的元素按1递增。
◆如果你想给第一个元素直接赋值,可以如下把它设成1:enum MonthNames { January=1, February, March, April };
◆如果你想赋任意值给每个元素——甚至相同的值——这也没有问题:enum MonthNames { January=31, February=28, March=31, April=30 };
◆最后的选择是不同于int的数据类型。可以在一条语句中按如此赋值:enum MonthNames : byte { January=31, February=28, March=31, April=30 };
你可以使用的类型仅限于long、int、short和byte.
以上介绍C#类型系统
【编辑推荐】