委託的使用全面剖析(委託好處,爲什麼要用委託,委託實例精解)

(1)瞭解委託的概念
c#
中的委託像c/c++中的函數指針.一個多重委託可以訂閱多個方法.一個委託可以在用來調用函數,具體調用哪個函數在運行的時候被確定.
什麼是委託?爲什麼需要他們?
委託是c#中類型安全的,可以訂閱一個或多個具有相同簽名方法的函數指針.委託在c#中是引用類型.委託的必須和所指向的方法具有相同的簽名.
C#System名字空間有個Delegate,他提供了對委託的支持.委託有兩種類型:單一委託和多重委託
單一委託只能訂閱一個方法,而多重委託可以訂閱多個具有相同簽名的方法.
委託適用於那種在某些語言中需要用函數指針來解決的情況,但是與函數指針不同,它是面向對象和類型安全的。
委託聲明定義一個類,它是從System.Delegate類派生的類。委託實例封裝了一個調用列表,其中列出了一個或多個方法,每個方法稱爲一個可調用實體。對於實例方法,可調用實體由一個實例和該實例的方法組成;對於靜態方法,可調用實體僅由一個方法組成。如果用一組合適的參數來調用一個委託實例,則該委託實例所封裝的每個可調用實體都會被調用,並且使用上述同一組參數。
  
(2)想想使用委託什麼時候顯示其效果:
創建一個myDelegate實例,然後立即調用它。這樣做並沒有太大的意義,因爲直接調用方法會更簡單。
當涉及其匿名特性時,委託才能真正顯示出其效果。
委託技術是.NET引入的一種重要技術,使用委託可以實現對象行爲的動態綁定,從而提高設計的靈活性。
  1.NET中的委託技術
  .NET運行庫支持稱爲“委託”的引用類型,其作用類似於C++中的函數指針。與函數指針不同,委託實例獨立於其封裝方法的類,主要是那些方法與委託類型兼容。另外,函數指針只能引用靜態函數,而委託可以引用靜態和實例方法。委託主要用於.NET Framework中的事件處理程序和回調函數。
  定義和使用委託分爲聲明、實例化和調用3個步驟。委託用委託聲明語法聲明,如:
delegate void myDelegate( );
  聲明一個名爲myDelegate的委託,它不帶參數並且不返回任何結果,如:
class Test
{
 static void F( )
 {
  System.Console.WriteLine (Test.F);
 }
 static void Main ( )
 {
  myeDelegate d = new myDelegate (F);
  d ( );
 }
}
  創建一個myDelegate實例,然後立即調用它。這樣做並沒有太大的意義,因爲直接調用方法會更簡單。當涉及其匿名特性時,委託才能真正顯示出其效果,如:
void MultiCall (myDelegate d, int count ) {
 for (int I = 0; I < count; I++) {
  d( );
 }
}
  顯示一個重複調用 myDelegateMultiCall 方法,這個方法不知道,也不必知道myDelegate的目標方法的類型、該方法具有的可訪問性或者是否爲靜態。對它來說最重要的是目標方法與myDelegate兼容。
  2、示例
下面的例子說明了委託的實現,代碼如下:
1using System;
2namespace DelegateExample
3{
4 public class TemplateMethod
5 {
6  public delegate float Comp(float a,float b);
7  public Comp myComp;
8  public TemplateMethod()
9  {}
10  public float DoComp(float[] f)
11  {
12   float nf = float.NaN;
13   foreach(float df in f)
14   {
15    if(float.IsNaN(nf))
16     nf = df;
17    else
18     nf = myComp(nf,df);
19   }
20   return nf;
21  }
22
23 }
24}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章