c 的委託和事件的例項學習

2021-07-05 07:34:50 字數 3002 閱讀 2696

簡寫

委託簡而言之是將方法作為引數進行傳遞.

1,宣告 傳入引數和返回需要一致(委託逆變:委託入參為基型別)

public    string method1(string);   

public    string method2(string);                         

public  string method3(string);

public  string delegate(string);

2,新增委託

delegate dgt;

delegate dgt1 = new delegate(method1);

delegate dgt2 = new delegate(method2);

delegate dgt3 = new delegate(method3);

dgt = dgt1;//新增單路廣播

//新增多路廣播

dgt += dgt2;

dgt += dgt3;

3,呼叫

//等價於 method3(method2(method1(string)));

//呼叫順序按新增前後

dgt("string");

**學習

委託的單路廣播,多路廣播,委託逆變,泛型委託.以及簡單的事件學習.

//委託可以被視為乙個更高階的指標,它不僅僅能把位址指向另乙個函式,而且還能傳遞引數,返回值等多個資訊

public class classdelegate

public string method2(string message)

}//委託物件可以繫結多個方法。

//當輸入引數後,每個方法會按順序進行迭代處理,並返回最後乙個方法的計算結果。

delegate double mydelegate3(double message);

public class price

public double discount(double price)

}//觀察者模式 讓多個觀察者同時關注同乙個事物,並作出不同的響應

public delegate double handler(double basicwages);

public class manager

}public class assistant

}public class wagemanager

//減public void detach(handler wagehandlersub)

//獲取多路廣播委託列表,如果觀察者數量大於0即執行方法

public void execute(double basicwages)

}//委託逆變

//object 為引數的委託,可以接受任何 object 子類的物件作為引數

public delegate void handlerobj(object obj);

public static void getmessage(object message)

//泛型委託

//可以使乙個委託繫結多個不同型別引數的方法,而且在方法中不需要使用 is 進行型別判斷

public delegate void handlergen(t obj);

public class coolpad

set }}

public class iphone

set }}

public static void getcoolpadprice(coolpad coolp)

public static void getiphoneprice(iphone ip)

//事件

public delegate void delegatetest(string name);

public class eventtest

}static void main(string arggs)

;//hobj(";");//沒啥用

//3//handlerobj hobj = ((object sender) =>

//);

//hobj(2);

//5//actionhobj = ((object sender) =>

// );

//hobj(2);

#endregion

#region 泛型委託

//actionhgcp = ((coolpad wee) =>

//);

//coolpad cpa = new coolpad();

= 10000;

//hgcp(cpa);

//actionhgip = ((iphone wee) =>

//);

//iphone ipa = new iphone();

= 10000;

//hgip(ipa);

//handlergencph = new handlergen(getcoolpadprice);

//coolpad cp = new coolpad();

= 2000;

//cph(cp);

//handlergeniph = new handlergen(getiphoneprice);

//iphone ip = new iphone();

= 6000;

//iph(ip);

#endregion

#region 事件測試

//事件:事件(event)可被視作為一種特別的委託,

//它為委託物件隱式地建立起add_***、remove_*** 兩個方法,用作註冊與登出事件的處理方法

eventtest etest = new eventtest();

//註冊事件

etest.myevent += delegate(string name)

;//呼叫

etest.getnameevent("jack");

#endregion

}}

c 委託和事件例項學習

common.cs 複製 如下 using程式設計客棧 system using system.collections.generic using system.text namespace delegateandevent.app code public string hicsharp strin...

C 委託和事件例項

當建立委託物件時,委託的引數型別必須與委託方法相對應。只要向建立委託物件的建構函式中輸入方法名稱example.method,委託就會直接繫結此方法。使用mydelegate.invoke string message 就能顯式呼叫委託方法。但在實際的操作中,我們無須用到 invoke 方法,而只要...

委託和事件的學習

參考 寫的內容 1 委託 它是乙個類,它定義了方法的型別,實現將方法作為引數傳遞給另乙個方法來呼叫,這種將方法動態的賦給引數的方式,可以避免了程式中過多的使用switch或if else 定義委託,它定義了可以代表方法的型別 public delegate void greetingdelegate...