专注

导航

面向对象技术-泛型

泛型在msdn上定义比较难懂。泛型是具有占位符(类型参数)的类、接口、接口和方法,这些占位符是类、接口、结构和方法所存储的一个或多个占位符。泛型集合类可以将类型参数用作他所存储对象的类型的占位符,类型参数作为其字段的类型和其方法的参数类型出现。
我们看一个实例:
泛型需要添加using System.Collections.Generic的命名空间;
而List类是ArrayList类的泛型的等效类,该类使用大小可以按需动态增加的数组是想IList泛型接口。其实用法上关键就是在IList和List后面加<T>,这个T就是你需要指定的集合的类型或对象类型。

   1:         //关键在这里,声明一个泛型集合变量,用接口IList,注意IList<Animal>表示此集合只能接受Animal类型,其他不可以
   2:          IList<Animal> arrayAnimal;
   3:          private void button2_Click(object sender, EventArgs e)
   4:          {
   5:              arrayAnimal = new List<Animal>();
   6:              arrayAnimal.Add(new Cat("mao1"));
   7:              arrayAnimal.Add(new Cat("gou1"));
   8:              arrayAnimal.Add(new Cat("mao2"));
   9:              arrayAnimal.Add(new Cat("mao3"));
  10:              arrayAnimal.Add(new Cat("gou4"));
  11:          }

 

这个时候,如果我们再写arrayAnimal.Add(123)或者arrayAnimal.Add("HelloWorld");这个时候编译就会出错了。
也就是说,arrayAnimal在add的时候,参数必须是Animal或者Animal的子类型才可以。
通常情况,都建议使用泛型集合,因为这样子可以获取类型安全的直接优点,而不需要从基集合类型派生并实现类型特定的成员。此外,如果集合元素为值类型,泛型集合的性能通常优于对应的非泛型集合类型。因为使用泛型不必对元素进行装箱。

posted on 2011-11-13 12:39  陈啊M  阅读(229)  评论(0)    收藏  举报