命名空间:using System;
1.数组有几种类型?分别如何声明和初始化?
(1)一维数组
int
[] array
=
new
int
[
5
]{
1
,
2
,
3
,
4
,
5
};
或
int
[] array;
array = new int [ 5 ]{ 1 , 2 , 3 , 4 , 5 };
array = new int [ 5 ]{ 1 , 2 , 3 , 4 , 5 };
(2)矩形数组
int
[ , ] array2d
=
new
int
[
2
,
2
]{ {
1
,
2
} , {
3
,
4
} };
int [ , , ] array3d = new int [ 2 , 3 , 4 ]{
{ { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 9 , 10 , 11 , 12 } },
{ { 13 , 14 , 15 , 16 }, { 17 , 18 , 19 , 20 }, { 21 , 22 , 23 , 24 } }
};
int [ , , ] array3d = new int [ 2 , 3 , 4 ]{
{ { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 9 , 10 , 11 , 12 } },
{ { 13 , 14 , 15 , 16 }, { 17 , 18 , 19 , 20 }, { 21 , 22 , 23 , 24 } }
};
(3)交错数组
int
[][] array
=
int
[
2
][]{
new int [] { 1 , 2 , 3 },
new int [] { 4 , 5 , 6 , 7 , 8 }
};
new int [] { 1 , 2 , 3 },
new int [] { 4 , 5 , 6 , 7 , 8 }
};
2.遍历数组:foreach
foreach
(
int
item
in
array)
{
//Do something
}
{
//Do something
}
3.数组协变
可以将继承类对象添加到父类对象数组中。
4.浅复制和深复制
当数组对象是引用对象时,浅复制和深复制是不一样的。同时,浅复制和深复制是所有对象所具有的的特征。
(1)浅复制
新数组仍引用原对象,即两个数组对对象所做的修改会互相反映出来。
使用Clone和CopyTo函数实现的是浅复制。
(2)深复制
新数组维护自己的新对象,一个数组对象的改变不会影响到另一个。
需要自己实现深复制的功能。使用序列化/反序列化方法。
A.首先,引入命名空间
using
System.Runtime.Serialization.Formatters.Binary;
B.然后,将需要实现深复制的数据类型标示为
[Serializable]
class ArrayType
{
//Class Implement;
}
class ArrayType
{
//Class Implement;
}
C.其次,将数组对象进行序列化
MemoryStream s
=
new
MemoryStream();
BinaryFormatter f = new BinaryFormatter();
f.Serialize(s, array);
s.Position = 0 ;
BinaryFormatter f = new BinaryFormatter();
f.Serialize(s, array);
s.Position = 0 ;
D.最后,对复制对象采用反序列化
arrayDeepCopy
=
(ArrayType[])f.Deserialize(s);
就完成了深复制功能。