什麼是委託
首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函式)的乙個東西。
如何使用委託
在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。
宣告,如:
1 namespace vczx.procsharp.exc
2
這就宣告了乙個委託,意義:任何乙個返回值為double,且只有乙個形參為double的函式,都可以用這個委託來呼叫。
注意:委託的宣告位置在namespace裡面,類的外面。其實,委託的宣告也可以在類的裡面,甚至是任何乙個可以宣告類的地方。
例項化:
首先我們要先有乙個滿足委託宣告的方法,假設乙個返回乙個數的2倍的方法:
1class mathsoperations27}
有了這樣乙個方法,我們就可以例項化乙個委託了:
mathsop operation = new mathsop( mathsoperations.multiplyby2 );
在例項化乙個委託時,要給它乙個引數,這個引數就是委託執行的方法,它可以是靜態方法,也可以是例項方法(這一點有別於函式指標,函式指標只能呼叫靜態方法),如:
mathsop operation = new mathsop( new class1().method1 );
在例項化完乙個委託之後,就可以用這個委託來呼叫方法了:
double result = operation( 1.23 );
例子**:
1namespace vczx.procsharp.exc
212 }
13 [stathread]
14 static void main(string args)
15 multiply by 2 is ", x, result );
20 console.read();
21 }
22 }
23}多路廣播委託
前面使用的委託只包含乙個方法呼叫。呼叫委託的次數與呼叫方法的次數相同。如果要呼叫多個方法,就需要多次顯示呼叫這個委託。其實委託也可以包含多個方法,這種委託就是多路廣播委託。多路廣播委託派生於system.multicastdelegate,它的combine方法允許把多個方法呼叫鏈結在一起,我們可以通過+=來向委託新增呼叫方法,也可以用-=刪除其中的呼叫方法。如:
1namespace vczx.procsharp.exc
2 gives ", value, result );
9 }
1011 public static void squre( double value )
12 gives ", value, result );
15 }
16 }
1718 delegate void mathsop( double x );
1920 class start
21
35 }
36}輸出:
multiplying by 2: 1.23 gives 2.46
squaring: 1.23 gives 1.5129
squaring: 1.23 gives 1.5129
注意,多路廣播委託宣告時必須返回void,否則返回值不知道應該送回什麼地方。對此,我做了乙個測試:如果不將委託的宣告返回void,則返回值返回的是最後乙個鏈入委託鏈的方法的返回值,編譯不會出錯。
為什麼要用委託
使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與c或c++中的函式指標不同,委託是物件導向,而且是型別安全的。
c 委託(個人理解)
個人理解來說,委託就是使用函式方法的乙個渠道,只不過這個渠道有些特殊,可以通過這個渠道使用乙個方法,同樣的是也可以通過這個渠道使用多個函式方法。首先問自己乙個問題,在程式語言的學習中,我們是怎樣使用自己定義的或者已存在的類的?無非這幾步 1.類的宣告2.類的例項化3.通過例項化的物件使用類裡面的變數...
委託 事件的個人理解
事件 乙個用event進行了封裝的委託型別的變數,使得在進行註冊的時候只能使用 或者 需要乙個觸發者和乙個執行者,類似於observer模式中的subject和observer 當乙個物件的狀態發生改變時,所有依賴於他的物件都會得到通知並被自動更新。觸發者 對委託 事件進行定義,並觸發事件的執行。s...
理解c 中委託
1.我們對委託做乙個總結 委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if else switch 語句,同時使得程式具有更好的可擴充套件性。正確理解委託的列子 usingsystem usingsystem...