委托主要用于.NETFramework中的事件處理程序和回調(diào)函數(shù),它是事件的基礎(chǔ)。委托的作用類似于c++中函數(shù)指針的作用。不同的是,委托實例獨(dú)立于它所封裝的方法的類,并且方法類型與委托的類型是兼容的。函數(shù)指針只能引用靜態(tài)函數(shù),而委托可以應(yīng)用靜態(tài)和實例方法。所有委托都是繼承自System.Delegate類,并且有一個調(diào)用列表。調(diào)用委托時所執(zhí)行的方法都被存放在這樣的一個連接列表中。使用delegate關(guān)鍵字可以聲明一個委托。通過將委托與命名方法或匿名方法關(guān)聯(lián),可以對委托進(jìn)行實例化。為了與命名方法一起使用,委托必須用具有可接受簽名的方法進(jìn)行實例化。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{//聲明一個委托delegateintMydelegate();classProgram{staticvoidMain(string[]args){testp=newtest();//將委托指向非靜態(tài)方法Mydelegatem=newMydelegate(p.InstanceMethod);//調(diào)用非靜態(tài)方法m();//將委托指向靜態(tài)方法m=newMydelegate(test.StaticMethod);//調(diào)用靜態(tài)方法m();Console.Read();}}publicclasstest{publicintInstanceMethod(){Console.WriteLine("正在調(diào)用非靜態(tài)方法InstanceMethod().");return0;}staticpublicintStaticMethod(){Console.WriteLine("正在調(diào)用靜態(tài)方法StaticMethod()。。。。");return0;}}}
目前累計服務(wù)客戶1000多家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
public?static?String?reverse1(String?str)
{
return?new?StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public?static?String?reverse3(String?s)
{?
char[]?array?=?s.toCharArray();?
String?reverse?=?"";??//注意這是空串,不是null
for?(int?i?=?array.length?-?1;?i?=?0;?i--)?
reverse?+=?array[i];?
return?reverse;?
}?
3.常用方法的變形:
public?static?String?reverse2(String?s)
{?
int?length?=?s.length();?
String?reverse?=?"";??//注意這是空串,不是null
for?(int?i?=?0;?i??length;?i++)?
reverse?=?s.charAt(i)?+?reverse;//在字符串前面連接,??而非常見的后面
return?reverse;?
}?
4.C語言中常用的方法:
public?static?String?reverse5(String?orig)
{?
char[]?s?=?orig.toCharArray();?
int?n?=?s.length?-?1;?
int?halfLength?=?n?/?2;?
for?(int?i?=?0;?i?=?halfLength;?i++)?{?
char?temp?=?s[i];?
s[i]?=?s[n?-?i];?
s[n?-?i]?=?temp;?
}?
return?new?String(s);??//知道??char數(shù)組和String相互轉(zhuǎn)化
}
//函數(shù)層
VB支持局部Static變量
C#不支持
VB支持?jǐn)?shù)組的最后一唯大小可變
C#的數(shù)組大小不能改變
VB的Try Catch語句支持Exit Try直接進(jìn)入Finally
C#無類似語句
VB的Catch可以帶When子句 使用 NET的異常filter功能有選擇的進(jìn)行捕獲
C#完全不支持這一功能
VB可以使用傳統(tǒng)的On Error方法 非結(jié)構(gòu)化地處理異常C#僅支持結(jié)構(gòu)化
C#支持使用checked語句暫時打開或關(guān)閉整數(shù)溢出檢查
VB僅支持整個項目級別處理
VB支持使用函數(shù)名作為返回變量 也支持Return
C#只支持Return
VB的Try Using For For Each等語句支持使用前邊定義的變量
C#的對應(yīng)語句只能在語句開始處定義
C#可以支持unsafe語法有限地支持指針和stack數(shù)據(jù)的訪問
VB不支持
C#支持yield return語法的迭代器生成
VB不支持
C#支持delegate語句就地生成支持closure的匿名方法
VB不支持
C#支持在委托與方法結(jié)合的過程中使用協(xié)變和反邊規(guī)則
VB則只能使用完全匹配規(guī)則
VB和C#的循環(huán)和分支有若干次要差別
C#支持nullable類型的運(yùn)算符跨類型支持
VB需要手工完成同樣功能
VB支持用實例訪問類的靜態(tài)成員
C#只支持類明訪問
VB支持按照非虛函數(shù)的規(guī)則 調(diào)用自身類型定義的一個虛函數(shù)
C#不支持這一功能
類庫層
VB有一個非常好用Microsoft VisualBasic dll 實現(xiàn)了許多幫助函數(shù) Application Framework應(yīng)用程序框架 My命名空間等C#只能望眼欲穿了……
C#以out/ref或者大小寫區(qū)分不同函數(shù) 這就是不符合CLS的
VB的每個特性幾乎都是CLS兼容的(即使是那些C#不支持的) 在VB中使用不會從根本上影響到與C#的交互
lishixinzhi/Article/program/net/201311/15508