C#数组
1. 数组初始化的几种方式
a) 常规写法 string[] Names=new string[]{"Shirley","Damon"};
b) 使用隐式类型的局部变量 var Names=new string[]{"Shirley","Damon"};
c) 使用隐式类型的数组功能 var Names=new[] {"Shirley","Damon"};
(使用所有元素最接近的共同基类来作为数组的类型,如果共同基类是Object,则编译时会报错)
d) 简化写法 string[] Names={"Shirley","Damon"};
(这种语法中使用隐式类型的局部变量编译报错)
2. 数组转型
a)值类型元素的数组不能显示或隐式转型为其他任何类型(可以使用Array.Copy方法)
b)数组的协变性的性能损失
1 string[] sa=new string[100]; 2 Object[] oa=sa; //oa引用一个元素类型为string的数组 3 oa[5] ="Jeff"; //性能损失:CLR检查oa的元素类型是不是string,没有发现问题 4 oa[3]=5; //性能损失:CLR检查oa的元素类型是不是Int32,发现错误并抛出 5 //ArrayTypeMismatchException异常
3. 所有数组都隐式派生自System.Array
4. 所有数组都隐式实现IEnumerable, ICollection和IList,当创建一个一维0基数组(下限为0的数组)类型是,CLR会自动使数组类型实现这三个接口的泛型版本。同时还会为数组类型的所有基类型实现这三个接口,只要他们是引用类型(CLR不会为值类型元素的基类实现接口)

浙公网安备 33010602011771号