您现在的位置是:首页 >

c语言向函数传递数组指针 在C#中实现类似C++函数指针数组的功能

火烧 2021-09-13 12:46:32 1069
在C#中实现类似C++函数指针数组的功能   在大家开发网络通讯软件的时候 应该都碰到过这种情况 在定义好通讯协议后要在程序中实现协议相应的功能 如   一个聊天程序有如下定义  1……登陆  2……

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

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

  一个聊天程序有如下定义

c语言向函数传递数组指针 在C#中实现类似C++函数指针数组的功能

  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);//因为协议是从 开始而数组的下标是从 开始的 所以我们要在协议类型减去 }

lishixinzhi/Article/program/net/201311/12467  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码