委託 多播委託 event 事件

2022-06-07 00:54:10 字數 1860 閱讀 6020

委託  多播委託 意義

/多播委託有啥用呢?乙個委託例項包含多個方法,可以通過+=/-=去增加/移除方法,invoke時可以按順序執行全部動作

//多播委託:任何乙個委託都是多播委託型別的子類,可以通過+=去新增方法

//+= 給委託的例項新增方法,會形成方法鏈,invoke時,會按順序執行系列方法

//-= 給委託的例項移除方法,從方法鏈的尾部開始匹配,遇到第乙個完全吻合的,移除,且只移除乙個,如果沒有匹配,就啥事兒不發生

method -= this.donothing;

method -= donothingstatic;

method -= new student().study;//去不掉 原因是不同的例項的相同方法,並不吻合

method -= student.studyadvanced;

method.invoke();

//中間出現未捕獲的異常,直接方法鏈結束了

}

event意義

//事件event:乙個委託的例項,帶乙個event關鍵字

//限制許可權,只允許在事件宣告類裡面去invoke和賦值,不允許外面,甚至子類

//事件和委託的區別與聯絡?

//委託是一種型別,事件是委託型別的乙個例項,加上了event的許可權控制

//student是一種型別,tony就是student型別的乙個例項,

public event action catmiaoactionhandler;

//例項展示

public class eventstandard

;//訂閱:把訂戶和發布者的事件關聯起來

lesson.increasehandler += new student().buy;

lesson.increasehandler += new tencent().popularize;

lesson.price = 3999;

}/// /// 訂戶:關注事件,事件發生後,自己做出對應的動作

///

public class student

lesson");

xeventargs args = (xeventargs)e;

console.writeline($"之前**");

console.writeline($"現在**");

console.writeline("果斷買了!!!");}}

public class tencent

lesson");

xeventargs args = (xeventargs)e;

console.writeline($"之前**");

console.writeline($"現在**");

console.writeline("廣大使用者請留意!!!");}}

/// /// 事件引數 一般會為特定的事件去封裝個引數型別

///

public class xeventargs : eventargs

public int newprice

}/// /// 事件的發布者,發布事件並且在滿足條件的時候,觸發事件

///

public class lesson

public string name

private int _price;

public int price

set);

this._price = value;}}

}/// /// 打折事件

///

///

public event eventhandler increasehandler;

}}

多播委託與事件

我們通過委託可以實現把方法作為引數,傳遞給委託執行。同樣,我們的委託也可以依次執行多個方法,此時就需要我們的多播委託了。沒有接觸多播委託之前,我們呼叫多個方法的委託定義如下 returnwithpara para new returnwithpara showid 當前類的方法 returnwith...

委託二(多播委託)

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

委託及多播委託

c 中的委託類似於c c 中的指標,委託就是概括了方法的簽名和返回值型別 委託可以理解為定義的乙個新的類。所以在可以定義類的任何地方都可以定義委託,也可以在委託的定義上加訪問修飾符 public private 等 1 定義乙個委託 類似於方法的定義 該委託表示的方法有兩個long型別引數,返回值型...