委托技術(shù)與設(shè)計模式
委托技術(shù)是.net引入的一種重要技術(shù),使用委托可以實現(xiàn)對象行為的動態(tài)綁定,從而提高設(shè)計的靈活性。
1、.NET中的委托技術(shù)
.NET運行庫支持稱為“委托”的引用類型,其作用類似于C++中的函數(shù)指針。與函數(shù)指針不同,委托實例獨立于其封裝方法的類,主要是那些方法與委托類型兼容。另外,函數(shù)指針只能引用靜態(tài)函數(shù),而委托可以引用靜態(tài)和實例方法。委托主要用于.NET Framework中的事件處理程序和回調(diào)函數(shù)。
所有委托都從System.Delegate繼承而來并且有一個調(diào)用列表,這是在調(diào)用委托時所執(zhí)行方法的一個鏈接列表。產(chǎn)生的委托可以用匹配的簽名引用任何方法,沒有為具有返回類型并在調(diào)用列表中包含多個方法的委托定義返回值。
可以使用的委托Cimbine及Remove方法在其調(diào)用列表中添加和移除方法。若要調(diào)用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法異步調(diào)用委托。委托類的實現(xiàn)由運行庫提供,而不由用戶代碼提供。
委托適用于那種在某些語言中需要用函數(shù)指針來解決的情況,但是與函數(shù)指針不同,它是面向?qū)ο蠛皖愋桶踩摹?BR> 委托聲明定義一個類,它是從System.Delegate類派生的類。委托實例封裝了一個調(diào)用列表,其中列出了一個或多個方法,每個方法稱為一個可調(diào)用實體。對于實例方法,可調(diào)用實體由一個實例和該實例的方法組成;對于靜態(tài)方法,可調(diào)用實體僅由一個方法組成。如果用一組合適的參數(shù)來調(diào)用一個委托實例,則該委托實例所封裝的每個可調(diào)用實體都會被調(diào)用,并且使用上述同一組參數(shù)。
委托實例的一個有用的屬性是它既不知道,也不關(guān)心其封裝方法所屬類的詳細信息,對它來說最重要的是這些方法與該委托的類型兼容。即只要方法的返回類型和參數(shù)表是相同的,則方法與委托類型兼容,方法的名稱不一定要與委托類相同。
定義和使用委托分為聲明、實例化和調(diào)用3個步驟。委托用委托聲明語法聲明,如:
delegate void myDelegate( );
聲明一個名為myDelegate的委托,它不帶參數(shù)并且不返回任何結(jié)果,如:
class Test
{
static void F( )
{
System.Console.WriteLine (“Test.F”);
}
static void Main ( )
{
myeDelegate d = new myDelegate (F);
d ( );
}
}
委托技術(shù)是.net引入的一種重要技術(shù),使用委托可以實現(xiàn)對象行為的動態(tài)綁定,從而提高設(shè)計的靈活性。
1、.NET中的委托技術(shù)
.NET運行庫支持稱為“委托”的引用類型,其作用類似于C++中的函數(shù)指針。與函數(shù)指針不同,委托實例獨立于其封裝方法的類,主要是那些方法與委托類型兼容。另外,函數(shù)指針只能引用靜態(tài)函數(shù),而委托可以引用靜態(tài)和實例方法。委托主要用于.NET Framework中的事件處理程序和回調(diào)函數(shù)。
所有委托都從System.Delegate繼承而來并且有一個調(diào)用列表,這是在調(diào)用委托時所執(zhí)行方法的一個鏈接列表。產(chǎn)生的委托可以用匹配的簽名引用任何方法,沒有為具有返回類型并在調(diào)用列表中包含多個方法的委托定義返回值。
可以使用的委托Cimbine及Remove方法在其調(diào)用列表中添加和移除方法。若要調(diào)用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法異步調(diào)用委托。委托類的實現(xiàn)由運行庫提供,而不由用戶代碼提供。
委托適用于那種在某些語言中需要用函數(shù)指針來解決的情況,但是與函數(shù)指針不同,它是面向?qū)ο蠛皖愋桶踩摹?BR> 委托聲明定義一個類,它是從System.Delegate類派生的類。委托實例封裝了一個調(diào)用列表,其中列出了一個或多個方法,每個方法稱為一個可調(diào)用實體。對于實例方法,可調(diào)用實體由一個實例和該實例的方法組成;對于靜態(tài)方法,可調(diào)用實體僅由一個方法組成。如果用一組合適的參數(shù)來調(diào)用一個委托實例,則該委托實例所封裝的每個可調(diào)用實體都會被調(diào)用,并且使用上述同一組參數(shù)。
委托實例的一個有用的屬性是它既不知道,也不關(guān)心其封裝方法所屬類的詳細信息,對它來說最重要的是這些方法與該委托的類型兼容。即只要方法的返回類型和參數(shù)表是相同的,則方法與委托類型兼容,方法的名稱不一定要與委托類相同。
定義和使用委托分為聲明、實例化和調(diào)用3個步驟。委托用委托聲明語法聲明,如:
delegate void myDelegate( );
聲明一個名為myDelegate的委托,它不帶參數(shù)并且不返回任何結(jié)果,如:
class Test
{
static void F( )
{
System.Console.WriteLine (“Test.F”);
}
static void Main ( )
{
myeDelegate d = new myDelegate (F);
d ( );
}
}

