C#學習(二)委託

C#學習(二)委託


2007-09-02 20:38:55
 標籤:委託   [推送到技術圈]

版權聲明:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://cancel.blog.51cto.com/133022/40797
       這次寫點關於委託的東西,有些網友在學習的時候老是不明白委託是什麼,用來幹什麼。我來寫一下自己的關於委託的理解,由於自己的寫作水平的限制參考了一下網上其他同仁的文章
      委託的概念,如果用過C或者C++,那麼委託可以看作是函數指針。可以從字面去理解,即“委託別人去執行某些操作”,也就是說執行一個操作,而這個操作過程自身並不知道,只是委託過來讓你去執行而已。
例子如下:
public delegate void TestHandler( string Msg );
private void Test( string sMsg )
{
 MessageBox.Show( sMsg );
}
TestHandler test= new TestHandler( Test);
test( "Hello World!" );
     例子很明顯,在執行test的時候,並不知道具體過程是什麼樣的,只是去執行而已。
     委託能做什麼:先分析一下事件,這是委託用的最多的地方。一般事件的初始化需要綁定一個事件處理函數,那麼當事件觸發的時候,處理函數會被調用,也就是說在事件處理函數可以明確的知道,此事件是被觸發了。例如,點擊窗體上的Button,它會把Click事件反饋給窗體。很明顯,委託是處理對象之間的信息交互。除了事件外,委託的大多用處都和此類似,那麼這樣使用的好處在於降低對象之間案的耦合性(耦合性是指模塊之間的關聯程度,而內聚是指模塊內部各部分的聚合程度,很顯然模塊之間的關聯度越小,模塊內部的聚合越高越容易維護)。耦合性比較高的話,模塊代碼不易分離,是不好的編程模式。
     其次委託不同於以前函數指針的地方在於,可以綁定多個委託函數,例如:
public delegate void TestHandler( string Msg );
private void Test1( string sMsg )
{
 Debug.WriteLine( "WriteHello1:" + sMsg );
}
private void Test2( string sMsg )
{
 Debug.WriteLine( "WriteHello2:" + sMsg );
}
TestHandler test= new TestHandler( Test1);
test+= new TestHandler( Test2);
test( "Hello World!" );
    不過在這種情況下,由於綁定到委託上的函數是按照順序執行的,所以有兩個問題:
    1:當一個函數執行過程中產生異常,那麼後面的函數是不能執行的。
    2:委託執行的返回值,當綁定多個函數的時候,委託執行的返回值是最後一個綁定函數執行的返回值。當委託綁定多個函數的時候,注意不要把異常擴散出來,其次委託類型的返回值爲“void”.
    好了到這了吧,希望對你有所幫助!
  

本文出自 “F_Pirate” 博客,請務必保留此出處http://cancel.blog.51cto.com/133022/40797

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章