.net 2.0中使用泛型的一种技巧

来源:互联网 发布:绝地求生amd显卡优化 编辑:程序博客网 时间:2024/05/22 07:07

 

 

 

泛型的使用需要在关键字(如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(
111new Person(111"张三"));
            personsOfCompanyA.Add(
222new Person(222"李四"));
            personsOfCompanyA.Add(
333new Person(333"王五"));

            
// 此处定义B公司的员工集合,同样地该声明语句需要指明Dictionary中key的类型,和value的类型
            Dictionary<int, Person> personsOfCompanyB = new Dictionary<int, Person>();
            personsOfCompanyA.Add(
444new Person(444"郭靖"));
            personsOfCompanyA.Add(
555new Person(555"王蓉"));
            personsOfCompanyA.Add(
666new 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(
111new Person(111"张三"));
            personsOfCompanyA.Add(
222new Person(222"李四"));
            personsOfCompanyA.Add(
333new Person(333"王五"));

            
// 此处定义B公司的员工集合
            PersonDictionary personsOfCompanyB = new PersonDictionary();
            personsOfCompanyA.Add(
444new Person(444"郭靖"));
            personsOfCompanyA.Add(
555new Person(555"王蓉"));
            personsOfCompanyA.Add(
666new 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,也可以实现类似上面的代码封装。