知识大全 在C#中实现类似C++函数指针数组的功能

Posted

篇首语:有学问和有知识的人是不同的。记忆造成了前者,哲学造成了后者。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在C#中实现类似C++函数指针数组的功能相关的知识,希望对你有一定的参考价值。

在C#中实现类似C++函数指针数组的功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  一个聊天程序有如下定义

  1……登陆

  2……获取好友列表

  3……修改自己资料

  …

  …

  N……退出

  每个功能由如下函数实现

  登陆

  Void Login(UserIinfouser Messagemsg)

  获取好友列表

  void GetFriendList(UserInfouser Messagemsg)

  修改自己资料

  void ModifySelfInfomation(UserInfouser Messagemsg)

  …

  …

  退出

  Void Logout(UserInfouser Messagemsg)

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

  

  public static void Analyze(UserInfo user Message message) switch (msg Class)//Class是协议的类型标志 下同 case : Login(user message); break; case : GetFriendList(user message); break; case : ModifySelfInfomation(user message); break; … case N: Logout(info msg); break; default: break;

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

  让我们先定义一个委托和它的数组

  private delegate void AnalyzerHandler(UserInfo user Message message)

  static AnalyzerHandler[] MainAnalyzer

  然后将函数都放到这个数组里

  

  MainAnalyzer = new AnalyzerHandler[] Login GetFriendList ModifySelfInfomation … Logout

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

  

  public static void Analyze (UserInfo user Message message) if (message Class > MainAnalyzer Length||message Class< ) //检查Class有没有超出有效范围 return; MainAnalyzer[message Class ] (user message);//因为协议是从 开始而数组的下标是从 开始的 所以我们要在协议类型减去

cha138/Article/program/net/201311/12467

相关参考

知识大全 c#中dllimport报错

  c#使用dllimport调用c++生成的dll库文件报错  报错信息为  对PInvoke函数xxx的调用导致堆栈不对称原因可能是托管的PInvoke签名与非托管的目标签名不匹配请检查PInvo

知识大全 asp array 数组函数实例

  asp教程array数组函数实例asp数组函数用于创建一个静态的一维数组你不能声明一个动态数组使用阵列功能  请注意在一个数组的第一个元素总是标记例如零myArray的()  该清单的论据是价值将

知识大全 分析指针数组与数组指针的区别和应用

分析指针数组与数组指针的区别和应用区别很容易解释:指针数组是数组,它里面每个元素都是个指针……数组指针是指针,它指向一个数组……应用嘛,这个就比较发散了。。。。一个存指针的数组的应用就是开放式哈希表,

知识大全 C/C++语言中指向函数的指针

C/C++语言中指向函数的指针  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在C语言中函数本身不是

知识大全 C++中初始化对象的数据成员必须要用到构造函数吗

C++中初始化对象的数据成员必须要用到构造函数吗?请高手详细解答!谢谢!  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们

知识大全 javascript模拟实现C# String.format函数功能代码

javascript模拟实现C#String.format函数功能代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 java语言与c++相比,有哪些优点?

java语言与c++相比,有哪些优点?主要是这两种开发者对内存地址变量的不同理解,使两种语言在编程的思维上有所差异。C中存在指针变量,而且每个指针对应着一个真实的物理内存地址,他可以对相应地址中的内存

知识大全 php遍历数组 list foreach each方法总结

在php中可以用来遍历数组的函数有很多如有for语句listeachforeach这四个函数这也是在php中遍历数组的几个主要的函数下面我来给大家介绍 foreach遍历数组我们在运用数组时

知识大全 数据结构 10.16 链式基数排序

  类似于表插入排序附设指针数组将顺序表视作一个静态链表利用修改指针实现分配和收集同时设置rd个队列的头指针和尾指针分别指示各队列的头结点和尾结点在链表中的位置  首先初始化空队列即将每个队列的头指针

知识大全 在C#中动态调用native dll的导出函数

在C#中动态调用nativedll的导出函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在C