C#的函数指针数组

开发 后端
本文介绍C#函数指针数组,在C++和Delphi中我们可以用C#函数指针数组来很好的解决这个问题。那我们在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);

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

  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++和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#继承知识详解
责任编辑:佚名 来源: IT168
相关推荐

2009-09-27 11:14:09

C#数组

2009-09-16 09:00:15

C#数组C#指针

2009-07-31 14:20:46

结构数组C#函数的参数

2011-07-20 17:54:02

C++

2009-08-07 09:29:22

C#数组C#函数

2021-01-13 06:58:35

C语言函数指针

2010-02-01 13:08:46

C++函数指针C#托

2009-08-18 17:29:02

C#使用指针

2010-01-18 17:23:55

函数

2024-03-28 18:12:28

指针函数指针C++

2011-07-15 01:20:58

C指针函数函数指针

2009-08-03 17:12:40

C#指针操作

2009-08-21 15:16:23

C#使用指针

2009-08-13 15:48:57

C#指针

2009-09-02 10:58:02

C#动态数组

2009-08-18 17:37:57

C#固定指针

2010-01-18 17:23:55

函数

2010-01-18 17:23:55

函数

2009-07-30 15:24:13

C#析构函数C#构造函数

2009-09-17 17:13:54

C#数组
点赞
收藏

51CTO技术栈公众号