簡寫
委託簡而言之是將方法作為引數進行傳遞.
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...