C#函数指针数组

在向大家详细介绍C#数组之前,首先让大家了解下C#函数指针数组,以后全面介绍C#数组。

在大家开发网络通讯软件的时候,应该都碰到过这种情况,在定义好通讯协议后要在程序中实现协议相应的功能。如:

一个聊天程序有如下定义:
1……登陆
2……获取好友列表
3……修改自己资料


N……退出

每个功能由如下C#函数指针数组实现:
登陆
Void Login(UserIinfouser,Messagemsg);
获取好友列表
void GetFriendList(UserInfouser,Messagemsg);
修改自己资料
void ModifySelfInfomation(UserInfouser,Messagemsg);


退出
Void Logout(UserInfouser,Messagemsg);

那现在我们要将它一一对应起来,我们该怎么做呢?很多人也许会这样做

    publicstaticvoidAnalyze(UserInfouser,Messagemessage)  
    {  
    switch(msg.Class)//Class是协议的类型标志,下同  
    ...{  
    case1:  
    Login(user,message);  
    break;  
    case2:  
    GetFriendList(user,message);  
    break;  
    case3:  
    ModifySelfInfomation(user,message);  
    break;  
    …  
    caseN:  
    Logout(info,msg);  
    break;  
    default:  
    break;  
    }  
    } 

这样做看起来没有什么不妥。但是……如果协议条数非常多或者说很复杂呢?比如说:我的协议是二级甚至是三级分类的呢?用更多的switch和case?这样显然不是一个好主意。在C++和Delphi中我们可以用C#函数指针数组来很好的解决这个问题。那我们在C#是不是也可以这样去解决这个问题呢?答案是肯定的。我们可以在C#中用委托数组来解决这个问题。

让我们先定义一个C#委托和C#数组:

private delegate void AnalyzerHandler(UserInfo user, Message message);
static AnalyzerHandler[] MainAnalyzer;

然后将C#函数指针数组都放到这个C#数组里:

    MainAnalyzer=newAnalyzerHandler[]  
    ...{  
    Login,  
    GetFriendList,  
    ModifySelfInfomation,  
    …  
    Logout  
    } 

那我们怎么调用呢?很简单,这样就行了!

    publicstaticvoidAnalyze(UserInfouser,Messagemessage)  
    ...{  
    if(message.Class>MainAnalyzer.Length||message.Class<0)//检查Class  
    有没有超出有效范围  
    return;  
    MainAnalyzer[message.Class-1](user,message);//因为协议是从1开始  
    而数组的下标是从0开始的,所以我们要在协议类型减去1  
    } 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值