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