C#的函數指針數組
在向大家詳細介紹C#數組之前,首先讓大家了解下C#函數指針數組,以后全面介紹C#數組。
在大家開發(fā)網絡通訊軟件的時候,應該都碰到過這種情況,在定義好通訊協(xié)議后要在程序中實現協(xié)議相應的功能。如:
一個聊天程序有如下定義:
1……登陸
2……獲取好友列表
3……修改自己資料
…
…
N……退出
每個功能由如下C#函數指針數組實現:
登陸
Void Login(UserIinfouser,Messagemsg);
獲取好友列表
void GetFriendList(UserInfouser,Messagemsg);
修改自己資料
void ModifySelfInfomation(UserInfouser,Messagemsg);
…
…
退出
Void Logout(UserInfouser,Messagemsg);
那現在我們要將它一一對應起來,我們該怎么做呢?很多人也許會這樣做
- publicstaticvoidAnalyze(UserInfouser,Messagemessage)
- ...{
- switch(msg.Class)//Class是協(xié)議的類型標志,下同
- ...{
- case1:
- Login(user,message);
- break;
- case2:
- GetFriendList(user,message);
- break;
- case3:
- ModifySelfInfomation(user,message);
- break;
- …
- caseN:
- Logout(info,msg);
- break;
- default:
- break;
- }
- }
這樣做看起來沒有什么不妥。但是……如果協(xié)議條數非常多或者說很復雜呢?比如說:我的協(xié)議是二級甚至是三級分類的呢?用更多的switch和case?這樣顯然不是一個好主意。在C++和Delphi中我們可以用C#函數指針數組來很好的解決這個問題。那我們在C#是不是也可以這樣去解決這個問題呢?答案是肯定的。我們可以在C#中用委托數組來解決這個問題。
讓我們先定義一個C#委托和C#數組:
private delegate void AnalyzerHandler(UserInfo user, Message message);
static AnalyzerHandler[] MainAnalyzer;
然后將C#函數指針數組都放到這個C#數組里:
- MainAnalyzer=newAnalyzerHandler[]
- ...{
- Login,
- GetFriendList,
- ModifySelfInfomation,
- …
- Logout
- }
那我們怎么調用呢?很簡單,這樣就行了!
- publicstaticvoidAnalyze(UserInfouser,Messagemessage)
- ...{
- if(message.Class>MainAnalyzer.Length||message.Class<0)//檢查Class
- 有沒有超出有效范圍
- return;
- MainAnalyzer[message.Class-1](user,message);//因為協(xié)議是從1開始
- 而數組的下標是從0開始的,所以我們要在協(xié)議類型減去1
- }
【編輯推薦】