CLR(数 组)

本文介绍了C#中的数组概念,包括一维数组、多维数组和交错数组。详细讲解了数组的声明、创建、初始化及数组元素的引用类型特性。同时探讨了数组的转型、协变性和如何高效访问数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组是允许将多个数据项当做一个集合来处理的机制。CLR支持一维数组、多维数组和交错数组(即由数组构成的数组)。所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object。这意味着数组始终为引用类型,是在托管堆上进行分配的。在你的应用程序的变量或字段中,包含的是对数组的引用,而不是包含数组本身的元素。

Int32[] myIntegers;		//声明一个数组引用
myIntegers=new Int32[100];	//创建含有100个Int32的数组
引用类型的数组:

Control[] myControls;		//声明一个数组引用
myControls=new Control[50];	//创建含有50个Control引用的数组
每个数组都关联了一些额外的开销信息。


创建一个二维数组,由Double值构成

Double[,] myDoubles=new Double[10,20];
创建一个三维数组,由String引用构成

String[,,] myStrings=new String[5,3,10];

初始化数组元素

C#允许用一个语句来创建初始化数组

String[] names=new String[]{"yxd","sxd"};
大括号中的以逗号分隔的数据项称为数组初始化器

在方法中声明一个局部变量来引用初始化好的数组,可利用C#的“隐式类型的局部变量”功能来稍微简化一下代码:

var names=new String[]{"yxd","sxd"}; 
可利用C#的隐式类型的数组功能让编译器推断数组的类型。

var names=new []{"yxd","sxd",null};


数组转型

对于元素为引用类型的数组,CLR允许将数组元素从一种类型隐式转型另一种类型。为了成功转型,两个数组类型必须维数相同,而且从源类型到目标类型,必须存在一个隐式或显式转换。CLR不允许将值类型元素的数组转型为其他任何类型。

某些情况下,将数组从一种类型转换为另一种类型是非常有用的。这种功能称为数组协变性。


所有数组都隐式派生自System.Array


所有数组都隐式实现IEnumerable,ICollection和IList

许多方法都能操作各种集合对象,因为在声明它们时,使用了IEnumberable,ICollection和IList等参数。


数组的传递和返回

数组作为实参传给一个方法时,实际传递的是对该数组的引用。因此,被调用的方法能修改数组中的元素。如果不想被修改,必须生成数组的一个拷贝,并将这个拷贝传给方法。注意,Array.Copy方法执行的是浅拷贝。换言之,如果数组元素是引用类型,新数组将引用现有的对象。


创建下限非零的数组


数组的访问性能


不安全的数组访问和固定大小的数组



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值