大话设计模式之面向对象基础篇(四)

下面总结大话设计模式基础知识中的集合以及泛型:

集合ArrayLlist

  说到集合,我们都会想到高中数学课本上的集合,一般用列举法或者文氏图表示,如今留给我唯一的印象就是一堆数据,然而说到一堆数据,貌似还有一个更高大上的名字,叫“数组”,下面就说说计算机领域数组的优缺点:
——优点:数组在内存中连续存储,因此可以快速容易地从头到尾遍历元素,可以快速修改元素等等。
——缺点:创建时必须要指定数组变量的大小,另外就是在两个元素中间添加元素也比较困难。
  综上所述,数组长度设置过大会浪费空间,设置过小会造成溢出,故“集合”横空出世!!!
  任何事物都有两面性,集合也有其优缺点:
——优点:他可以根据使用大小按需动态添加,不用受事先设置其大小的控制,可以任意添加、插入或是移除某一范围元素,比数组要方便
——缺点:他不像数组那样事先指定数据类型,在他眼里所有的元素都是Object(只能说他执念太深了),导致ArrayList集合在使用值类型数据的时候,需要不断进行装箱和拆箱的工作,即伴随着大量的计算。

装箱和拆箱

  .NET包含一个特殊的Object类,可以接受任意的数据类型的值,当所传递或所赋值的类型不是一个特定的数据类型时,object类就提供了一种传递参数和赋值的通用方法。赋给object的值必须作为引用类型,并存在托管堆中。

装箱

  int age = 24;
  object refAge= age;
  可以看的出,第一条语句创建一个变量age,并将值放在托管栈中;
  第二条语句将age的值赋给引用类型。它将值24放在托管堆中。
  这个值类型包装为引用类型的过程,称为装箱。

大话设计模式之面向对象基础篇(四)_第1张图片

拆箱

  相反,将引用类型转换为值类型的过程称为拆箱。拆箱将对对象强制转换为原来的类型。对前面的对象进行拆箱。
  int  newAge = (int) refAge;
  string newAge =(String) refAge;
  拆箱的值必须和它要转换的目标的变量有相同的类型。

大话设计模式之面向对象基础篇(四)_第2张图片

泛型

  泛型是具有占位符( 类型参数 )的类、结构、接口和方法,是集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());    
    }    
}


   我的理解 :泛型的作用就是提前设好门槛,来者凭借身份办事,而不是来者不拒照单全收,导致自己的地盘杂乱无章,错误百出。

总结

  兵来将挡,水来土掩,慢慢衍生出一部《进化论》,数组→集合→泛型。

你可能感兴趣的:(泛型,装箱和拆箱,大化设计模式之面向对象基础,集合和数组)