委託和事件

2021-07-10 08:00:46 字數 1786 閱讀 1514

委託就是將方法當作變數來使用。把委託作為方法的乙個載體,方法好像引數一樣可以被傳遞,並進行運算。委託相當於函式的工廠。委託是型別,就好像類是型別一樣。(類封裝了方法和資料,委託封裝了方法,變數封裝了資料)

委託的使用和類的使用非常相似。

//delegate 返回型別 名稱(簽名);

delegate

void myfirstdelegate();//2宣告乙個委託型別

class program

//1準備方法

public

static

void

func()

}

方法必須和宣告委託的簽名和返回型別一致

如果方法只會被使用一次,並且這個方法體又非常簡單,可以用匿名方法初始化委託,來簡化**。

static

void main(string args)

//語句塊沒有使用任何引數時可以省略

myfirstdelegate mydele=delegate;

mydele();

console.readkey();

}

lambda表示式是匿名方法的進一步簡化,如果先引入lambda表示式,那麼就不會有匿名方法。

static void main(string args)

;mydele();

console.readkey();

}

表示式的引數列表中的引數不一定需要包含型別(隱式型別),除非委託有ref或out引數—此時必須註明型別(顯式型別)。

如果只有乙個引數,並且是隱式型別的,周圍的圓括號可以被省略,否則必須有括號。

如果沒有引數,必須使用一組空的圓括號。

如果方法只有一句話,return也可以省略

事件就像專門用於某種特殊用途的簡單委託。事件包含了乙個私有的委託。

事件被觸發時,它呼叫委託依次呼叫列表中的方法。

事件是類或結構的成員。必須宣告在類或結構中。

class program

}class cat

public

delegate

void

catshouteventhandler();//2宣告委託型別

public

event catshouteventhandler catshout;//3宣告事件變數catshout

public

void

shout()

", name);

if (catshout != null)}}

class mouse

//1準備方法

public

void

run()

快跑",name);}}

事件和委託在語法上的區別只有兩點:1.event關鍵字2.只能用+=賦值給事件。

把例子中的event去掉,catshout就是委託,可以正常執行。這時可以通過cat.catshout();直接呼叫catshout。即宣告為委託(即去掉event),不執行shout,也可以呼叫catshout。

加上event後,通過cat.catshout();呼叫catshout就會報錯。即宣告為事件,shout執行了,才可以觸發catshout。不能直接呼叫catshout。

相比之下事件比委託更加安全。

委託和事件

主要過程如下 1.在後台 中,我們可以定義處理程式方法alartrang 2.然後定義委託,引用到處理程式方法的例項。3.最後將委託新增到事件中。從而,引發事件時就會呼叫相關的事件處理方法。若要使用在另乙個類中定義的事件,必須定義和註冊乙個事件處理程式。事件 處理程式必須具有與為事件宣告的委託相同的...

委託和事件

委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...

事件和委託

事件是物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動 例如滑鼠單擊 引起的,也可能是由某些其他的程式邏輯觸發的。引發事件的物件稱為事件傳送方。捕獲事件並對其作出響應的物件叫做事件接收方。在事件通訊中,事件傳送方類不知道哪個物件或方法將接收到 處理 它引發的事件。所需要的是在源和接收方...