下面总结大话设计模式基础知识中的集合以及泛型:
集合ArrayLlist
说到集合,我们都会想到高中数学课本上的集合,一般用列举法或者文氏图表示,如今留给我唯一的印象就是一堆数据,然而说到一堆数据,貌似还有一个更高大上的名字,叫“数组”,下面就说说计算机领域数组的优缺点:——优点:数组在内存中连续存储,因此可以快速容易地从头到尾遍历元素,可以快速修改元素等等。
——缺点:创建时必须要指定数组变量的大小,另外就是在两个元素中间添加元素也比较困难。
综上所述,数组长度设置过大会浪费空间,设置过小会造成溢出,故“集合”横空出世!!!
任何事物都有两面性,集合也有其优缺点:
——优点:他可以根据使用大小按需动态添加,不用受事先设置其大小的控制,可以任意添加、插入或是移除某一范围元素,比数组要方便
——缺点:他不像数组那样事先指定数据类型,在他眼里所有的元素都是Object(只能说他执念太深了),导致ArrayList集合在使用值类型数据的时候,需要不断进行装箱和拆箱的工作,即伴随着大量的计算。
装箱和拆箱
.NET包含一个特殊的Object类,可以接受任意的数据类型的值,当所传递或所赋值的类型不是一个特定的数据类型时,object类就提供了一种传递参数和赋值的通用方法。赋给object的值必须作为引用类型,并存在托管堆中。装箱
int age = 24;object refAge= age;
可以看的出,第一条语句创建一个变量age,并将值放在托管栈中;
第二条语句将age的值赋给引用类型。它将值24放在托管堆中。
这个值类型包装为引用类型的过程,称为装箱。
拆箱
相反,将引用类型转换为值类型的过程称为拆箱。拆箱将对对象强制转换为原来的类型。对前面的对象进行拆箱。int newAge = (int) refAge;
string newAge =(String) refAge;
拆箱的值必须和它要转换的目标的变量有相同的类型。
泛型
泛型是具有占位符(类型参数)的类、结构、接口和方法,是集ArrayList和数组Array于一身的好东西,下面看代码说话:using System.Collections.Generic; //增加泛型集合命名空间
public partial class Form1 : Form
{
IList<Animal> arrayAnima; //声明一泛型集合变量,用接口IList,表明此集合变量只能接受Animal类型
//动物报名按钮事件
private void button4_Click(object sender, EventArgs e)
{
arrayAnimal = new List<Animal>(); //实例化List对象
arrayAnimal.Add(AnimalFactory.CreateAnimal("猫", "小花", 1));
((Animal)arrayAnimal[0]).ShoutNum = 5;
arrayAnimal.Add(AnimalFactory.CreateAnimal("狗", "阿毛", 2));
arrayAnimal.Add(AnimalFactory.CreateAnimal("狗", "小黑", 3));
arrayAnimal.Add(AnimalFactory.CreateAnimal("猫", "娇娇", 4));
arrayAnimal.Add(AnimalFactory.CreateAnimal("猫", "咪咪", 5));
MessageBox.Show(arrayAnimal.Count.ToString());
}
}
我的理解:泛型的作用就是提前设好门槛,来者凭借身份办事,而不是来者不拒照单全收,导致自己的地盘杂乱无章,错误百出。