泛型的使用需要在关键字(如List和Dictionary)后面紧跟用<>包含着的类型名称,如果同一种写法多次使用到,则会显得有些繁冗。例如下面的代码,定义了一个类Person,表示对“人”的简单抽象,而在现实世界中,“人”经常是成群地以“集合”方式出现,这里就选择Dictionary作为集合的数据结构来描述这样一个集合。
using System;
using System.Collections.Generic;
class Person
... {
private int identityNO;
private string name;
public int IdentityNO
...{
get ...{ return identityNO; }
set ...{ identityNO = value; }
}
public string Name
...{
get ...{ return name; }
set ...{ name = value; }
}
public Person(int identityNO, string name)
...{
this.identityNO = identityNO;
this.name = name;
}
}
class TestApp
... {
public static void Main(string[] args)
...{
// 定义公司A的员工集合,需要显式地指明key和value的类型
Dictionary<int, Person> personsOfCompanyA = new Dictionary<int,Person>();
personsOfCompanyA.Add(111, new Person(111, "张三"));
personsOfCompanyA.Add(222, new Person(222, "李四"));
personsOfCompanyA.Add(333, new Person(333, "王五"));
// 此处定义B公司的员工集合,同样地该声明语句需要指明Dictionary中key的类型,和value的类型
Dictionary<int, Person> personsOfCompanyB = new Dictionary<int, Person>();
personsOfCompanyA.Add(444, new Person(444, "郭靖"));
personsOfCompanyA.Add(555, new Person(555, "王蓉"));
personsOfCompanyA.Add(666, new Person(666, "段誉"));
// 下面再声明多个Person组成的集合
Dictionary<int, Person> personsOfCompanyC = new Dictionary<int, Person>();
Dictionary<int, Person> personsOfCompanyD = new Dictionary<int, Person>();
Dictionary<int, Person> personsOfCompanyE = new Dictionary<int, Person>();
}
} ;
在上面的代码中可以发现,每次定义Person集合的时候都需要显式地指出集合中key和value的类型,如果对Dictionary<int,Person>进行封装,则可以精简代码的编写。
使用与上述代码相同的Person类,新增一个集合类PersonDictionary用于封装Dictionary<int,Person>。
// 定义一个集合类,该类继承与Dictionary,并且强制指定了key和value的类型分别为int和Person
class PersonDictionary : Dictionary < int , Person >
... {
// 可以在此处添加新的属性或方法
} ;
// 则在TestApp类中可以使用PersonDictionary 作为Person集合的数据结构
class TestApp
... {
public static void Main(string[] args)
...{
// 定义公司A的员工集合,无需再显式地指明key和value的类型
PersonDictionary personsOfCompanyA = new PersonDictionary();
personsOfCompanyA.Add(111, new Person(111, "张三"));
personsOfCompanyA.Add(222, new Person(222, "李四"));
personsOfCompanyA.Add(333, new Person(333, "王五"));
// 此处定义B公司的员工集合
PersonDictionary personsOfCompanyB = new PersonDictionary();
personsOfCompanyA.Add(444, new Person(444, "郭靖"));
personsOfCompanyA.Add(555, new Person(555, "王蓉"));
personsOfCompanyA.Add(666, new Person(666, "段誉"));
// 下面再声明多个PersonDictionary的集合
PersonDictionary personsOfCompanyC = new PersonDictionary();
PersonDictionary personsOfCompanyD = new PersonDictionary();
PersonDictionary personsOfCompanyE = new PersonDictionary();
}
} ;
修改后的代码在视觉上和.net 1.1有很多相似,只需要新增一个PersonDictionary集合类,使用这样的方法可以很快地将原有.net 1.1的代码转移到.net 2.0平台而不用做过多的修改。同时在PersonDictionary中可以添加一些在项目中使用倒的属性和方法,以对Dictionary进行扩展。
对于其他支持泛型的类如List,也可以实现类似上面的代码封装。