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

 

 

 

泛型的使用需要在关键字(如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,也可以实现类似上面的代码封装。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值