多播
一次委託可以呼叫多個方法
通過+和-運算子可以實現多播的增加或減少
using system;
class ******class
static public int staticmethod(int nid, string sname)
}public delegate int somedelegate(int nid, string sname);
static void main()
", d1(5, "aaa"));
//呼叫靜態方法
somedelegate d2 = new somedelegate(workerclass.staticmethod);
console.writeline("invoking delegate staticmethod, return=", d2(5, "aaa"));
//多播
somedelegate d3 = d1 + d2;
console.writeline("invoking delegates d1 and d2(multi-cast),return= ", d3(5, "aaa"));
//委託中的方法個數
int num_method = d3.getinvocationlist().length;
console.writeline("number of methods referenced by delegate d3: ", num_method);
//多播d3減去委託d2
d3 = d3 - d2;
console.writeline("invoking delegates d1 (multi-cast),return= ", d3(5, "aaa"));
//委託中的方法個數
num_method = d3.getinvocationlist().length;
console.writeline("number of methods referenced by delegate d3: ", num_method);
}}
將多個方法組合到乙個委託中,如果方法的返回值非void,則通過委託呼叫方法僅得到最後乙個方法的返回值,其它的返回值都將丟失
將多個方法組合到乙個委託中,會順序呼叫委託中的每個方法
using system;
class mathoperations
public static double square(double value)
public static void multiplybytwo2(double value)
gives ", value, result);
}public static void square2(double value)
gives ", value, result);
}}delegate double doubleop(double x);
delegate void doubleop2(double x);
class test
}
事件
定義事件的委託
public delegate void eventhandler(object from, myeventargs e);
定義事件
public event eventhandler textout;
啟用事件
if (textout !=null)
textout(this, new eventargs());
system.eventargs是包含事件資料的類的基類
myeventargs類派生於eventargs,實現自定
義事件資料的功能
訂閱和取消訂閱事件
evsrc.textout += new eventsource.eventhandler(catchevent);
evsrc.textout -= new eventsource.eventhandler(catchevent);
catchevent的簽名要與定義的委託eventhandler的簽名要相同
C 多播委託與事件
1.發布 訂閱模式 委託本身是乙個更大的模式的基本單位,這個模式稱為發布 訂閱。委託的使用及其對publish subscribe模式的支援是需要學習的重點。雖然,很多問題都可以單獨用委託來實現,但是事件構造提供了額外的 封裝 使publish subscribe模式更容易實現,更不容易出錯。2.多...
C9 高階指標
一 指標變數的定義和使用 二 取值運算子 三 取值運算子 四 指標的算術運算 typedef struct student student typedef struct cpoint cp typedef struct teacher teacher 命名 全大寫 或 k 駝峰命名法typedef ...
多播委託與事件
我們通過委託可以實現把方法作為引數,傳遞給委託執行。同樣,我們的委託也可以依次執行多個方法,此時就需要我們的多播委託了。沒有接觸多播委託之前,我們呼叫多個方法的委託定義如下 returnwithpara para new returnwithpara showid 當前類的方法 returnwith...