C 委託(Delegate)精講

2021-10-11 18:30:34 字數 1680 閱讀 6719

文章目錄

一、委託概念

二、宣告委託

三、使用委託

一、委託概念

委託型別表示對具有特定引數列表和返回型別的方法的引用。 通過委託,可以將方法視為可分配給變數並可作為引數傳遞的實體。

二、宣告委託

在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...