文章目錄
一、委託概念
二、宣告委託
三、使用委託
一、委託概念
委託型別表示對具有特定引數列表和返回型別的方法的引用。 通過委託,可以將方法視為可分配給變數並可作為引數傳遞的實體。
二、宣告委託
在c#中使用乙個類分兩個階段,首選定義這個類,告訴編譯器這個類由什麼欄位和方法組成的,然後使用這個類例項化物件。在我們使用委託的時候,也需要經過這兩個階段,首先定義委託,告訴編譯器我們這個委託可以指向哪些型別的方法,然後,建立該委託的例項。
定義委託的語法如下:
delegate void intmethod(int x);
定義了乙個委託叫做intmethod,這個委託可以指向什麼型別的方法呢?我們必須明確,首先這個方法要帶有乙個int型別的引數,並且方法的返回值是void的。
定義乙個委託要定義方法的引數和返回值,使用關鍵字delegate定義,如下:
delegate double doublemethod(double x,double y);
delegate string stringmethod();
注意:如果我們要把方法當做引數來傳遞的話,就要用到委託。簡單來說,委託是乙個型別,這個型別可以賦值乙個方法的引用。
三、使用委託
首先,建立乙個委託,如下:
// 定義乙個返回值為string的委託型別
private delegate string stringdel();
在主函式裡,呼叫這個委託,如下:
int x = 30;
// 使用委託型別,建立例項
stringdel stringdel = new stringdel(x.tostring); // stringdel指向x中的tostring方法
// 通過委託例項(物件)去呼叫x中的tostring方法
console.writeline(stringdel());
// 檢視型別是否轉換成功
console.writeline(stringdel().gettype());
通過上面這個例子,我們可以很清楚的看到,我把tostring()這個方法的引用賦給了這個委託,同時這個委託的返回值是string,此時,我們這個委託就可以實現tostring()這個方法的作用了。
執行效果
在這裡插入描述
總結在這裡我們首先使用stringdel委託宣告了乙個型別叫做stringdel,接下來使用new對它進行初始化,使它引用到x中的tostring()方法上,這樣stringdel就相當於x.tostring,我們通過stringdel()執行方法就相當於x.tostring()。
補充通過上面的委託示例,呼叫方法還有另一種方法,如下:
// 直接將x的tostring方法的引用,賦給stringdel
stringdel stringdel = x.tostring;
// 通過invoke方法呼叫stringdel所引用的方法
console.writeline(stringdel.invoke());
console.writeline(stringdel.invoke().gettype());
注意:通過委託型別去呼叫乙個方法,跟直接呼叫這個方法作用是一樣的。
筆記 C 委託 delegate
網上查了很多資料,發現講委託的思路很亂!於是來整理一下。1 比喻 我把委託看成是手槍上的彈匣,而需要委託的函式則是彈匣中的子彈。要打幾槍就在委託裡裝幾發子彈,然後帶上這把槍 而不是去為每把槍裝上一發子彈,然後背一大堆槍 這裡的槍就是主函式gun 子彈可能是fire ice gold 屬性 彈匣就是委...
c 委託 delegate 揭秘
委託是一種定義方法簽名的型別。當例項化委託時,您可以將其實例與任何具有相容簽名的方法相關聯。您可以通過委託例項呼叫方法。在表面上,委託很簡單,使用new來構造委託例項。使用委託例項的變數名來呼叫 函式。實際情況是編譯器,clr在幕後做了大量的工作來隱藏其複雜性,只有了解了這些幕後的東西,你才能真正的...
c 委託 與多播委託delegate
委託又叫匿名函式,首先我們來說為什麼要使用委託 委託到底是什麼 舉乙個例子 我想求煉表裡少於10的數的和,getsum static int getsum listlist return sum 我又想求煉表裡所有奇數的和,那麼是否是又要寫乙個函式getsum2 來求呢 static int get...