c#委託與事件
一、委託
關鍵字:delegate 委託是c#中的一種型別,它實際上是乙個對某個方法引用的類
委託是一種引用方法型別 一旦為委託分配了方法 委託將與該方法有相同完全的行為(委託具有引數 和返回值)
delegate類能擁有乙個簽名(signature);
只能持有與他簽名相匹配的方法的引用;
委託實際上是封裝了乙個函式的引用物件;
類似於c.c++中的函式指標;
使用方法:
1、宣告乙個delegate 物件型別
public delegate void mydelegate(string name);
2、建立delegate物件
mydelegate md=new mydelegate(methodname);//指向方法名稱
3、呼叫delegate物件private string methodname(string name)
md("jack");
public void drive(string carname)
public void drivemoto(string carname)
這個就是乙個簡單的開車的方法 沒有實際意義 當我們
如果是開的是汽車或者自行車的時候 我們希望也能對應的方法
那麼我們就得定義
public void drivecar(string carname);
public void drivebic(string carname);
但是我們擴充套件的時候 效能很差 也不符合傳說中面相物件的原則
我們可以通過委託來傳遞方法簽名
public delegate void mydelegate(string name);
public void drive(string carname,mydelegate funcname)
ok 當我們呼叫 drive函式的時候直接就可以drive(moto,drivemoto)
drive(moto,drivecar);
好,現在有點意思了,其實委託在簡單的程式中並不是有多大的作用,
但是.net事件、非同步呼叫、 以及自定義事件 等等都是用到委託的
委託應用在在傳遞匿名方法上,這種動態的將方法賦給引數 減少了
程式中使用判斷語句的次數
二、事件
事件就是某個物件發出的訊息
除非事件的物件 (sender) 做出相應的物件(receiver)
c#中的事件就是有乙個特殊簽名的delegate委託(event)
//定義委託
public delegate void drivecareventhandler(); //定義事件(宣告乙個特殊的委託物件)
public class car
}} //呼叫方法
car car=new car();
car.drivecarevent+=new drivecareventhandler(car_drivevent);
car.drivecar();
static void car_drivevent()
訂閱事件用+= 取消訂閱用-= 可以進行多播訂閱(委託亦可以 不過第一次指定時候用= 餘下來用+=)
總結:委託就是委任別人去代辦某些問題和方法,盡量的使業務和邏輯之間松耦合 來達到對邏輯的封裝以及呼叫。
說的簡單一點就是函式的例項化,我們對例項進行操作
事件是特殊的委託型別,物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動(例如滑鼠單擊)引起的,
也可能是由某些其他的程式邏輯觸發的。
委託和事件 這是我個人的一些理解,也參考了網上的例子自己進行學習和感悟 希望能夠分享小小的心得 共同進步
C 中的事件與委託
delegate委託 delegate是c 中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名 signature 並且它 只能持有與它的簽名相匹配的方法的引用 它所實現的功能與c c 中的函式指標十分相似。它允許你傳遞乙個類a的方法m給另乙...
C 中的委託與事件
寫這篇博文的目的是要記錄一下學習委託與事件的心的與 方便之後查閱 1 委託,是乙個函式的簽名,規定了函式的返回值與引數列表。類似於這類函式的乙個 簽名相同但是用途不同的函式s,要執行的時候就通過 來執行,使得函式執行得到諸多的方便。delegate相當於乙個類,具有類的一些特性。2 事件,事件就是應...
C 中的委託與事件 筆記
1.委託是型別安全的 函式,是將方法作為方法引數。委託可以註冊多個方法 委託就是乙個 multicastdelegate類,可以通過 賦值,新增方法 物件方法與靜態方法 內部使用delegate.combine方法新增方法。2.事件 事件也是委託,是對委託的封裝,將委託宣告成private成員,不讓...