什麼是委託,理解委託

2021-04-12 19:57:26 字數 2189 閱讀 4723

我自己的比較抽象粗淺的認識是:乙個類想執行乙個方法,但它本身沒有這個方法,這個方法在另乙個類中,於是它「委託」那個類來幫它執行 ,接觸c#是在兩年前了,今天才算對這個概念有個粗淺的認識,慚愧啊!

mailmanager類想執行fax類的faxmsg方法,但是fax類不讓執行,所以mailmanager就定義乙個   委託mailmsgeventhandel來執行fax類的faxmsg方法,   

如果再加上滿足一定的條件(文中是有類登記)再執行faxmsg,就成了具體的委託,既事件.   

委託是個類,而事件是個型別,事件是委託的例項

委託是乙個可以對方法進行引用的類。與其他的類不同,委託類具有乙個簽名,並且它只能對與其簽名匹配的方法進行引用。這樣,委託就等效於乙個型別安全函式指標或乙個**.

c#中的委託和指標不一樣,指標不通過msil而是直接和記憶體打交道,這也是指標不安全的原因所在,當然也是採用指標能夠提高程式執行速度的緣故;委託不與記憶體打交道,而是把這一工作交給clr去完成。clr無法阻止將不安全的**呼叫到本機(非託管)**中或執行惡意操作。然而當**是型別安全時,clr的安全性強制機制確保**不會訪問本機**,除非它有訪問本機**的許可權。  

委託派生於基類system.delegate,不過委託的定義和常規類的定義方法不太一樣。委託的定義通過關鍵字delegate來定義:  

  

public   delegate   int   mydelegate(int   x,int   y);  

  

上面的**定義了乙個新委託,它可以封裝任何返回為int,帶有兩個int型別引數的方法。任何乙個方法無論是例項方法還是靜態方法,只要他們的簽名(引數型別在乙個方法中的順序)和定義的委託是一樣的,都可以把他們封裝到委託中去。這種簽名方法正是保證委託是型別安全的手段之一。  

  

產生委託例項和產生類例項(物件)差不多,假如我們有如下的方法:  

  

public   int   sub(int   x,int   y)  

  

  

  

我們就可以使用如下的**得到乙個委託例項:  

  

mydelegate   calculatin=new   mydelegate(sub);  

  

接下來我們就可以直接使用calculation呼叫sub方法了:  

calculation(10,3);  

  

下面我們將用委託重寫上面的乙個程式來看一下在c#中如何通過委託實現由函式指標實現的功能:  

  

using   system;    

  

class   mathclass  

  

  

  

public   static   int   min(int   a,int   b)  

  

  

  

public   static   int   sub(int   a,int   b)  

  

  

public   static   int   minus(int   a,int   b)  

  

  

  

}  

  

class   handler  

  

  

  

}  

  

}  

  

class   test  

  

  

  

}  

我們還可以宣告乙個委託陣列,就像宣告乙個物件陣列一樣,上面的例子中就使用到了委託陣列;乙個委託還可以封裝多個方法(多路廣播委託,經常與事件處理程式結合使用),只要這些方法的簽名是正確的。多路廣播委託的返回值一般為void,這是因為乙個委託只能有乙個返回值,如果乙個返回值不為void的委託封裝了多個方法時,只能得到最後封裝的方法的返回值,這可能和使用者初衷不一致,同時也會給管理帶來不方便。如果你想通過委託返回多個值,最好是使用委託陣列,讓每個委託封裝乙個方法,各自返回乙個值。

什麼是委託?

思考 static關鍵字是什麼?加上這個關鍵字,這個方法只能,在本類中使用!簡記 想做什麼事情,但是又不確定,就用委託佔位 然後將方法作為傳遞!1 什麼是委託?委託就是把 方法 作為引數進行傳遞!委託是一種 資料型別 像類一樣 可以宣告委託型別變數 2 定義的方法沒有返回值,那麼定義的委託也沒有返回...

什麼是委託

什麼是委託 首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法 函式 的乙個東西。如何使用委託 在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。宣告,如 1 namespace vczx...

什麼是委託?為什麼要使用委託?什麼是事件?

1 什麼是委託?首先宣告乙個委託 public delegate string islengthfive string s 下面寫幾個方法 public string dowork string a public string dosomework string b public string do...