CLR via C#:数组

数组:是一种允许将多个数据项作为集合来处理的机制。具有以下特性:
1.数组隐式派生自Array抽象类以及隐式实现IEnumerable,ICollection和IList接口。所以数组是在托管堆上分配的引用类型。
2.数组初始化器的格式为"{数据项1, 数据项2, …}"。用来在数组定义时执行初始化工作。参考以下代码:

string[] names = new string[2];
names[0] = "zjz";
names[1] = "yy";
等价于:
string[] names = new string[] {"zjz", "yy"};
等价于:
string[] names = {"zjz", "yy"};
等价于:
var names = new string[] {"zjz", "yy"};
等价于:
var names = new [] {"zjz", "yy"};

3.当数据项是引用类型时,可以将数组显示或者隐式的转换为同维度的其他类型数组。当数据项是值类型时,不能进行数组转型,但是可以使用以下方式进行转换:
1>.Array.Copy函数用来将源数组中的数据项以浅拷贝转型的方式复制到目标数组中。
2>.Array.ConstrainedCopy函数用来将源数组中的数据项以不执行装箱,拆箱,向下类型转换的方式复制到目标数组中。
3>.Buffer.BlockCopy函数用来将按位兼容类型的源数组中某些数据项复制到按位兼容类型的目标数组中。
4.Array.CreateInstance函数用来创建指定数据项类型,维度以及每一维的下限值(也就是起始索引值)和数据项个数的数组。
5.由于JIT会对0基(指的是起始索引为0)的数组进行优化,所以0基的数组比非0基的数组性能要高些。如遍历0基数组时,JIT会在遍历之前检查数组是否越界;而遍历非0基数组时,JIT会在遍历里面检查数组是否越界。

不安全方式访问数组:就是使用unsafe代码块来访问数组。具有以下特性:
1.使用unsafe关键字来标记数组操作代码块。该代码块编写起来比较复杂且内部没有类型安全检查,容易出现内存泄漏。
2.可以访问托管堆和非托管堆以及线程栈上的数组。
3.stackalloc关键字类似于c中的alloc函数,主要用来分配线程栈上的内存空间。当分配数组空间时,数组必须是一维0基值类型(内部不能包含任何引用类型成员)数组。

内联数组:就是将数组的内存固定在当前类型中。具有以下特性:
1.当前类型只能是值类型(struct)。
2.使用unsafe关键字来标记当前类型或者内联数组字段。
3.内联数组字段必须使用fixed关键字标记。
4.内联数组必须是一维0基(起始索引从0开始)。
5.内联数组的数据项类型必须是以下类型之一:Boolean,Char,SByte,Byte,Int16,Int32,Int64,UInt16,UInt32,UInt64,Single,Double。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值