4.2.6 数组 一个数组包含有通过计算下标访问的变量。所有包含于数组中且被当作元素的变量必须是同一类型。这种类型自然被称为"数组类型"。数组可以存储整数对象、字符串对象或者 你提出的任何对象。 数组的维数就是所谓的排(rank),它决定了相关数组元素的下标数。最常用的数组是一维数组(第一排)。一个多维数组具有的排数大于1 。每个维的下标始于0,终于维的长度减1 。 应有足够的理论支持。让我们看一下用一个数组初始化器( array initializer)初始化的数组: string[] arrLanguages = { "C", "C++", "C#" }; 该简写效果等同以下: arrLanguages[0]="C"; arrLanguages[1]="C++"; arrLanguages[2]="C#"; 而编译器为你做了所有的工作。当然,它将同样为多维数组初始化器工作: int[,] arr = {{0,1}, {2,3}, {4,5}}; 它是以下的简写: arr[0,0] = 0; arr[0,1] = 1; arr[1,0] = 2; arr[1,1] = 3; arr[2,0] = 4; arr[2,1] = 5; 如果你不想事先初始化一个数组,但知道了它的大小,该声明就象这样: int[,] myArr = new int[5,3]; 如果数组的大小必须动态地被计算,用于数组创建的语句可以象这样写: int nVar = 5; int[] arrToo = new int[nVar]; 正如我在这一节开始所陈述的,你可以往数组里面塞任何东西,只要所有的元素类型都相同。因此,如果你想把任何东西放进一个数组,就声明它的类型为对象: 4.3 加框和消框 这一章的课程中,我已经给出了各式各样的值类型和引用类型。由于速度的原因,你会使用值类型——它除了占据一定空间的内存块外,就没有什么了。但是,有时对象的方便性就象值类型一样好用。 这就是加框和消框登上了舞台的地方,加框和消框是C#类型系统的核心概念。通过允许一个值类型转换成类型对象或从类型对象转换成值类型,这种机制形成了值类型和引用类型之间的捆绑连接。任何东西终究是一个对象——但是,仅当需要它们是对象时。 4.3.1 加框转换 给一个值加框指隐式地把任何值类型转换成类型对象。当一个值类型被加框时,一个对象实例就被分配,且值类型的值被拷贝给新的对象。 看以下例子: int nFunny = 2000; object oFunny = nFunny; 第二行的赋值暗示调用一个加框操作。nFunny整型变量的值被拷贝给oFunny对象。现在整型变量和对象变量都同时存在于栈中,但对象的值居留在堆中。 那么,它暗示着什么呢?它们的值互相独立——在它们之间没有连接。(oFunny没有引用nFunny的值。) 以下代码说明了结果: int nFunny = 2000; object oFunny = nFunny; oFunny = 2001; Console.WriteLine("{0} {1}", nFunny, oFunny); 当代码改变oFunny的值时,nFunny的值并没有改变。只要你脑袋中有这个copy动作,就能够使用值类型的对象功能,发挥出你的巨大优势! 4.3.2 消框转换 和加框相比,消框是显式操作——必须告诉编译器,你想从对象中抽取出哪一种值类型。当执行消框操作时,C#检测所请求的值类型实际上存储在对象实例中。经过成功的校验,该值被消框。 这就是消框如何执行: int nFunny = 2000; object oFunny = nFunny; int nNotSoFunny = (int)oFunny; 如果错误地请求一个double值 double nNotSoFunny = (double)oFunny; 通用语言运行时(Common Language Runtime,简写CLR)将会引发一个InvalidCastException异常。你可以在第7章 "异常处理" 中学到更多有关异常处理的知识。
4.4 小结 在这一章中,你学到了C#中用到的各种类型。简单的值类型包括整型、布尔型、浮点型和小数型。你会非常经常地用到一些类型,进行数学和金融的计算,还有逻辑表达。 在介绍引用类型之前,我显示了一个看起来象类的结构类型。它几乎如一个类般地运作,但它只是一个值类型,这使它更加适合需要有大量的小对象的场合。 引用类型起始于所有对象之母的objedt本身。object是C#中所有对象的基类,且它同样用于值类型的加框和消框。除此之外,我还让你领略了代表元、字符串和数组。 令C#程序员十分神气的类型就是类。它是C#面向对象编程的心脏,下一章整章专门让你迅速理解这个激动人心且功能强大的类型。  
2/2 首页 上一页 1 2 |