淺學C (9) 多播 事件

2021-09-10 03:39:04 字數 2140 閱讀 2234

多播

一次委託可以呼叫多個方法

通過+和-運算子可以實現多播的增加或減少

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