程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 《Effective C#》:用委托實現回調(1)

《Effective C#》:用委托實現回調(1)

編輯:關於C語言

委托屬於C#中的新名詞,它的應用也非常廣泛,例如事件就是委托最簡單而又直接的例子。

那麼首先說說什麼是委托,其實委托在用過C或者C++的人看來就是函數指針,不過使用C#的大多數人都沒有用過這兩門語言,因此對委托的理解不是很深,對於委托可以簡單的從字面去理解,即“委托別人去執行某些操作”,也就是說執行一個操作,而這個操作過程自身並不知道,只是委托過來讓你去執行而已。

參看如下這個例子。

public delegate void HelloHandler( string Msg );
private void SayHello( string sMsg )
{
 MessageBox.Show( sMsg );
}
// delegate sample
HelloHandler hHello = new HelloHandler( SayHello );
hHello( "Hello World!" );

例子很明顯,在執行hHello的時候,並不知道具體的過程是什麼樣的,只是去執行而已。

現在要說說委托能做些什麼,那麼先來分析一下事件,這也是委托用得最多的地方。一般事件的初始化需要綁定一個事件處理函數,那麼當事件觸發的時候,處理函數會被調用,也就是說在事件處理函數可以明確的知道,此事件是被觸發了。例如,點擊窗體的上的Button,它會把Click事件反饋給窗體。很明顯,委托是處理對象之間的信息交互。除了事件外,委托的大多用處都和此類似,那麼這樣使用的好處在於降低對象之間耦合性。

其次委托不同於以前函數指針的地方在於,可以綁定多個委托函數,例如:

public delegate void HelloHandler( string Msg );
private void WriteHello1( string sMsg )
{
 Debug.WriteLine( "WriteHello1:" + sMsg );
}
private void WriteHello2( string sMsg )
{
 Debug.WriteLine( "WriteHello2:" + sMsg );
}
// delegate sample
HelloHandler hHello = new HelloHandler( WriteHello1 );
hHello += new HelloHandler( WriteHello2 );
hHello( "Hello World!" );

不過在這種情況下,由於綁定到委托上的函數是按照順序執行的,所以有兩個潛在的問題。

第一個問題,當一個函數執行過程中產生異常,導致後面的不能進行執行。就上面的例子而言,如果在“WriteHello1”函數中出現異常,會導致“WriteHello2”不能被執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved