熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在C#中實現類似C++函數指針數組的功能

2013-11-13 10:04:11  來源: .NET編程 

  在大家開發網絡通訊軟件的時候應該都碰到過這種情況在定義好通訊協議後要在程序中實現協議相應的功能

  一個聊天程序有如下定義

  1……登陸

  2……獲取好友列表

  3……修改自己資料

  …

  …

  N……退出

  每個功能由如下函數實現

  登陸

  Void Login(UserIinfouserMessagemsg)

  獲取好友列表

  void GetFriendList(UserInfouserMessagemsg)

  修改自己資料

  void ModifySelfInfomation(UserInfouserMessagemsg)

  …

  …

  退出

  Void Logout(UserInfouserMessagemsg)

  那現在我們要將它一一對應起來我們該怎麼做呢?很多人也許會這樣做

  

  public static void Analyze(UserInfo user Message message) { switch (msgClass)//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 (messageClass > MainAnalyzerLength||messageClass<) //檢查Class
有沒有超出有效范圍 return; MainAnalyzer[messageClass ] (user message);//因為協議是從開始
而數組的下標是從開始的所以我們要在協議類型減去 }


From:http://tw.wingwit.com/Article/program/net/201311/12467.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.