委托類型用來定義和響應應用程式中的回調, C#與.NET進階程式設計一書是這麼說的。
是以要先搞懂回調的概念。 回調(Callback)本身指的是可以作為參數傳給其他代碼的一段可執行代碼, 我對于一段可執行的代碼了解是姑且可以看做就是方法(Method)。 也就是說可以把方法作為參數傳遞給其他代碼執行。 而回調從字面自已了解是相對與調用來定義的, 正常調用往往都是高層代碼(如應用程式)去調用底層的函數(如系統函數,庫函數),而回調則是底層函數執行時調用高層的代碼。
在C語言中有回調函數的概念是用指針來實作的, 本人對于指針的了解還隻是局限在大學學的一點點知識是以對于指針就不多說了。而C#中回調功能則是通過委托來實作,而且委托更為安全和面向對象。 對于安全我的基本了解是應該是類型安全。
對于最開始我所說的委托回調我一直不是很了解,今天結合一些例子仔細想了想,有了一些自己的想法就寫了 以免以後的時候自己忘了。
下面我用一個實際的例子來說明一下。
定義了一個類,我們可以看做是底層的操作
class bottomClass
{
public delegate void testHandler(string message);//定義一個委托類型
private testHandler listofHandler;//定義委托的變量;
//通過方法給委托添加方法,而封裝了委托變量
public void Regist(testHandler callback)
{
listofHandler += callback; //因為委托是支援多路廣播的,是以可以用這種方式,其實是實作了testHandler.Combine()的方法.
}
//提供給高層所調用的方法,執行這個方法滿足一定條件就會要調用 調用者提供的方法和方法的實作, 也就是把方法當做參數讓底層代碼來使用。
public void show(int a)
{
if (a < 10)
{
listofHandler("小于10");
}
else
{
listofHandler("大于10");
}
}
}
而我們在main函數入口裡,就相當于高層裡面,調用show(),就會根據傳入的值不同而調用 調用方自己定義的方法,當然在用之前肯定得先把方法注冊到委托裡面去, 而這個方法是由調用者自己定義的,隻需要滿足目前定義委托要求的格式就行了。 可以想象事件,底層知道我們觸發事件了,但是觸發事件後要做什麼卻是由我們調用方來決定的,而我們決定後的方式則通過委托傳遞給底層讓其操作。其實也就是相當于我們傳遞一個字元串要底層來操作,比如顯示,加減。但是我們現在要傳遞是方法,是以用委托。
程式肯定有很多bug 手随便打的 不要深究。
今天所說的都是委托的同步調用,也就是實作委托對象的invoke方法。 下一次我會把異步調用的了解寫一下。