委託及多播委託

2021-07-15 09:45:44 字數 1893 閱讀 1713

c#中的委託類似於c  c++中的指標,委託就是概括了方法的簽名和返回值型別 ,委託可以理解為定義的乙個新的類。

所以在可以定義類的任何地方都可以定義委託,也可以在委託的定義上加訪問修飾符 public  private 等

1、定義乙個委託  類似於方法的定義

該委託表示的方法有兩個long型別引數,返回值型別為double

delegate double twolongop (long first,long second);

定義乙個不帶引數,返回乙個string型別的值的委託

public delegate string getstring();

2、委託的簡單使用

class program

", firststringmetheod());

}}

委託的例項化:

例項化乙個getastring型別的firststringmethod變數

getastring firtstringmethod = new gerastring(x.tostring);

也可以 getastring firtstringmethod =x.tostring;

3、帶參委託和委託陣列使用

class mathsoperations

public static double square(double value)

}

class program

;for (int i = 0; i < operations.length; i++)

]", i);

processanddisnum(operations[i], 2.0);

processanddisnum(operations[i], 8);

processanddisnum(operations[i], 16);

console.writeline();}}

static void processanddisnum(doubleop action, double value)

,result of operation is ", value, result);

}}

泛型action委託表示可以引用乙個void返回型別的方法,泛型func允許呼叫返回值的方法。最多可以傳遞16個引數型別和乙個返回型別。func表示乙個帶參的方法

func operations= ;

static void processanddisnum(funcaction, double value)

4、多播委託的使用

如果呼叫多播委託就可以按順序連續呼叫多個方法,但是,多播委託的簽名必須返回void ,否則,只能得到委託呼叫的最後乙個方法的結果

多播委託可以使用+= -= 運算子,用於在委託中新增或刪除方法呼叫

actionoperations
= mathsoperations.multiplybytwo;operations += mathsoperations.square;
processanddisnum(operations,2);

processanddisnum(operations,8);

使用多播委託時,如果其中乙個方法丟擲異常,整個迭代就會停止。

為了避免這個問題可以自己迭代方法列表

delegate delegates=operations .getinvocationlist();

foreach(action d in delegates)

委託二(多播委託)

委託最令人興奮的的特性之一是它支援多播委託 multicasting 簡單地說,多播委託是指允許建立方法的呼叫列表或者鍊錶的能力。當多播委託被呼叫時,列表中的方法均自動執行。這種鍊錶很容易建立 初始化乙個誒託,然後使用 或 運算子為鍊錶新增方法。在移除乙個方法時,使用 或 如果委託有返回值,則將列表...

C 委託,委託鏈,多播委託

委託 概念 委託是一種使用者自定義的型別.是一種類.可以把委託看成用來執行方法 函式的乙個東西 形式 delegate 函式返回型別 委託名稱 引數部分 例項化 委託型別 例項化名 new 委託型別 方法名稱 實現 usingsystem usingsystem.collections.generi...

委託 多播委託 event 事件

委託 多播委託 意義 多播委託有啥用呢?乙個委託例項包含多個方法,可以通過 去增加 移除方法,invoke時可以按順序執行全部動作 多播委託 任何乙個委託都是多播委託型別的子類,可以通過 去新增方法 給委託的例項新增方法,會形成方法鏈,invoke時,會按順序執行系列方法 給委託的例項移除方法,從方...