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不会为值类型元素的基类实现接口)

 

 

 

 

posted @ 2013-03-20 16:37  hechaner  Views(114)  Comments(0)    收藏  举报