设为首页 加入收藏

TOP

C#的函数指针数组
2013-10-07 00:57:25 来源: 作者: 【 】 浏览:64
Tags:函数 指针

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

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

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


N……退出

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


退出
Void Logout(UserInfouser,Messagemsg);

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

  1. publicstaticvoidAnalyze(UserInfouser,Messagemessage)  
  2. ...{  
  3. switch(msg.Class)//Class是协议的类型标志,下同  
  4. ...{  
  5. case1:  
  6. Login(user,message);  
  7. break;  
  8. case2:  
  9. GetFriendList(user,message);  
  10. break;  
  11. case3:  
  12. ModifySelfInfomation(user,message);  
  13. break;  
  14. …  
  15. caseN:  
  16. Logout(info,msg);  
  17. break;  
  18. default:  
  19. break;  
  20. }  

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

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

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

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

  1. MainAnalyzer=newAnalyzerHandler[]  
  2. ...{  
  3. Login,  
  4. GetFriendList,  
  5. ModifySelfInfomation,  
  6. …  
  7. Logout  

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

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

【编辑推荐】

  1. C#在应用程序间发送消息实现浅析
  2. 一些C#时间类型的入门知识
  3. C#接口和抽象类技术特点浅析
  4. 一个C#时间计算的实例
  5. C#继承知识详解
【责任编辑:志京 TEL:(010)68476606】

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C#导出dll函数 下一篇浅析C#语言调用DLL

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: