**(callback)
函式實際上是方法呼叫的指標,也稱為
函式指標
,是乙個非常強大的程式設計特性。.net
以委託的形式實現了函式指標的概念
,.net
委託是型別安全的。
1、委託
委託是乙個類
,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用
if-else(switch)
語句,同時使得程式具有更好的可擴充套件性。
當要把方法傳給其他方法時,需要使用委託。
int i = int.parse("99");
啟動執行緒
—在c#
中,可以告訴計算機並行執行某些新執行序列。在基類
system.threading.thread
的乙個例項上使用方法
start(),
就可以開始執行乙個執行緒。
通用庫類
—有許多庫包含執行各種標準任務的**。這些庫通常可以自我包含。
事件—
一般是通知**發生了什麼事件。gui
程式設計主要是處理事件。在發生事件時,執行庫需要知道應執行哪個方法。這需要把處理事件的方法傳送為委託的乙個引數。
要啟動乙個新執行緒,有乙個
entrypoint()
的方法,該方法是開始執行執行緒時的地方。
void entrypoint()
也可以用下面的**開始執行新執行緒:
thread newthread = new thread();
thread.start(entrypoint);
.1 在
c#中宣告委託
使用委託兩個步驟
:先定義要使用的委託,後建立該委託的乙個或多個例項。
定義委託語法:
delegate void voidoperation(uint x);
.2 c#中使用委託
在int
上呼叫tostring()
方法的一種相當冗長的方式:
private delegate string getastring();
static void main(string args)
委託的乙個特徵
是它們的型別是安全的,可以確保被呼叫的方法簽名是正確的。但它們不關心呼叫該方法的是什麼型別的物件,甚至不考慮該方法是表態方法,還是例項方法。
給定委託的例項可以表示任何型別的任何物件上的例項方法或表態方法—只要方法的簽名匹配於委託的簽名即可。
匿名方法
想使委託工作,方法必須已經存在(
即委託是用方法的簽名定義的)。
使用委託還有另外一種方式:即通過匿名方法。匿名方法上用作委託引數的乙個**塊。
如何使用匿名方法:
class program
;console.writeline(anondel("start of string"));}}
多播委託
多播委託
:委託包含多個方法。
呼叫多播委託,可以按順序連續呼叫多個方法,委託的簽名就必須返回void
。編譯器發現某個委託返回
void
,就會自動假定這是乙個多播委託。
delegate void doubleop(double value);
class mainentrypoint
}多播委託還識別運算子-和-=
,在從委託中刪除方法呼叫 。
將方法繫結到委託
語法如下:
static void main(string args)
輸出為:
morning,
flora
早上好,
flora
委託不同於
string
的乙個特性:
可以將多個方法賦給同乙個委託,或者叫將多個方法繫結到同乙個委託,當呼叫這個委託的時候,將依次呼叫其所繫結的方法。
事件c#事件的目的是為了讓使用者無需理解底層的委託就可以使用它們。
1、從客戶的角度討論事件
事件接收器是指在發生某些事情時被通知的任何應用程式、物件或元件。
傳送器的作用是引發事件,它可以是應用程式中的另乙個物件或程式集,在系統事件中,例如滑鼠單擊或鍵盤按鍵,傳送器就是.net
執行庫。注:事件的傳送器並不知道接收器是誰。
使用委託
:在事件接收器的某個地方有乙個方法,它負責處理事件 。在每次發生已註冊的事件時,就執行這個事件處理程式。
傳送器定義接收器要使用的委託,接收器將事件處理程式註冊到事件中。
連線事件處理程式的過程稱為
封裝事件
。btnone.click += new eventhandler(button_click);
把第二個按鈕的click
事件也連線到同乙個
button_click
方法上:
btnone.click += new eventhandler(button_click);
btntwo.click += new eventhandler(button_click);
如果使用匿名方法,就不需要button_click
方法和btntwo_click
方法了:
btnone.click += new eventhandler(lblinfo.text = "button one was pressed";);
btntwo.click += new eventhandler(lblinfo.text = "button two was pressed";);
委託和事件
主要過程如下 1.在後台 中,我們可以定義處理程式方法alartrang 2.然後定義委託,引用到處理程式方法的例項。3.最後將委託新增到事件中。從而,引發事件時就會呼叫相關的事件處理方法。若要使用在另乙個類中定義的事件,必須定義和註冊乙個事件處理程式。事件 處理程式必須具有與為事件宣告的委託相同的...
委託和事件
委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...
事件和委託
事件是物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動 例如滑鼠單擊 引起的,也可能是由某些其他的程式邏輯觸發的。引發事件的物件稱為事件傳送方。捕獲事件並對其作出響應的物件叫做事件接收方。在事件通訊中,事件傳送方類不知道哪個物件或方法將接收到 處理 它引發的事件。所需要的是在源和接收方...