按照书本中的内容是要先写泛型的,但是因为上一篇刚写完值类型和引用类型在虚拟内存的操作,所以我就把数组和元祖提前写,正好当做复习。
对于同一个类型的多个对象,我们可以使用集合和数组。C#用特殊的记号声明、初始化和使用数组。Array类在后台发挥作用,它为数组中元素的排序和过滤提供了几个方法。使用枚举器,就可以迭代数组中的所有元素。
对于不同类型的多个对象,可以使用Tuple(元组)类型。
数组是一种数据结构。在声明数组时,应先定义元素的类型,其后是一对空方括号,后面是变量名。在声明了数组之后,我们需要为数组的元素分配内存。因为数组时引用类型,所以我们必须用new来给它分配堆上的内存。我们还可以在声明数组时,使用数组的初始化器为数组的每个元素赋值。(如果我们在声明时使用初始化器为数组赋值,那就可以不必指定数组的大小,因为编译器会自动统计元素的个数)。如:
{
// 声明数组
int[] arr;
// 为数组分配内存
arr = new int[4];
// 还可以为数组元素赋值,但必须在声明时
arr = new int[4]{1,2,3,4};
// 简化写法
int[] arr = {1,2,3,4};
}
如果你不知道数组应包含多少个元素个数,那你应该用集合而不是数组。
访问数组元素的下标都是从0开始,0代表第一个数组元素。数组不仅可以声明值类型的元素,还可以声明引用类型的元素,而且往往使用引用类型的元素还挺常见。要注意的是,使用引用类型如类类型,那你需要为该类型里面的每个元素都要初始化值。如:
public class Person
{
public string name;
public int age;
public void GETAge()
{
DO.....
}
}
public class M
{
// 使用类的实例作为数组元素
Person[] myPerson= new Person[2];
// 每次初始化都是初始化这个对象
myPerson[0] = new Person{ name = "马云",age = 55};
myPerson[1] = new Person{ name = "totoro",age = 18};
}
结合上一篇托管堆的内容,回忆下,myPerson是存储在栈上的一个变量。
。补个值类型的图:
声明多维数组,如:
int[,] arr2 = new int[1, 2];
int[,,] arr3 = new int[2,2,2] {
{