C 用委託有什麼好處? 它起什麼作用?

2021-07-30 07:53:45 字數 1944 閱讀 8185

什麼是委託

首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函式)的乙個東西。

如何使用委託

在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。

宣告,如:

1    namespace vczx.procsharp.exc

2   

這就宣告了乙個委託,意義:任何乙個返回值為double,且只有乙個形參為double的函式,都可以用這個委託來呼叫。

注意:委託的宣告位置在namespace裡面,類的外面。其實,委託的宣告也可以在類的裡面,甚至是任何乙個可以宣告類的地方。

例項化:

首先我們要先有乙個滿足委託宣告的方法,假設乙個返回乙個數的2倍的方法:

1class mathsoperations 2

7}有了這樣乙個方法,我們就可以例項化乙個委託了:

mathsop operation = new mathsop( mathsoperations.multiplyby2 );

在例項化乙個委託時,要給它乙個引數,這個引數就是委託執行的方法,它可以是靜態方法,也可以是例項方法(這一點有別於函式指標,函式指標只能呼叫靜態方法),如:

mathsop operation = new mathsop( new class1().method1 );

在例項化完乙個委託之後,就可以用這個委託來呼叫方法了:

double result = operation( 1.23 );

例子**:

1namespace vczx.procsharp.exc 2

12        }

13        [stathread]

14        static void main(string args)

15        multiply by 2 is 」, x, result );

20            console.read();

21        }

22    }

23}多路廣播委託

前面使用的委託只包含乙個方法呼叫。呼叫委託的次數與呼叫方法的次數相同。如果要呼叫多個方法,就需要多次顯示呼叫這個委託。其實委託也可以包含多個方法,這種委託就是多路廣播委託。多路廣播委託派生於system.multicastdelegate,它的combine方法允許把多個方法呼叫鏈結在一起,我們可以通過+=來向委託新增呼叫方法,也可以用-=刪除其中的呼叫方法。如:

1namespace vczx.procsharp.exc

2 gives 」, value, result );

9        } 10

11        public static void squre( double value )

12        gives 」, value, result );

15        }

16    } 17

18    delegate void mathsop( double x ); 19

20    class start

21   

35    }

36}輸出:

multiplying by 2: 1.23 gives 2.46

squaring: 1.23 gives 1.5129

squaring: 1.23 gives 1.5129

注意,多路廣播委託宣告時必須返回void,否則返回值不知道應該送回什麼地方。對此,我做了乙個測試:如果不將委託的宣告返回void,則返回值返回的是最後乙個鏈入委託鏈的方法的返回值,編譯不會出錯。

為什麼要用委託

使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與c或c++中的函式指標不同,委託是物件導向,而且是型別安全的。

到底什麼是hash?它起什麼作用?

從emule誕生到現在也已經有了兩年左右時間了,隨著emule的普及,喜歡他的人也越來越多,但是由於emule對技術相應有乙個門檻,不像bt那麼容易上手,所以很多朋友很長時間以來一直都有這樣或那樣的疑問,今天是週末我也獻獻醜,寫一篇關於hash的文章。大家天天都在使用emule,hash這個詞是在e...

用 代替 http 有什麼好處?

我們可以先看這兩種寫法的優缺點。缺點 w3c標準允許省略協議,但你不應該直接用 這只是協議 http https ftp 等 的一部分。這中用法從技術的角度來說是不正確的。它在某些瀏覽器上會有點小問題,並且有可能產生跨站攻擊之類的問題,還有做混合開發或者本地除錯直接開啟頁面的時候,因為是file 從...

C 泛型有什麼好處

關於object型別 1.object型別可以來引用任何型別的例項 2.object型別可以儲存任何型別的值 3.可以定義object型別的引數 4.可以把object作為返回型別。但是 這樣做有很大的問題 1.會因為程式設計師沒有記住使用的型別而出錯,造成型別不相容 2.值型別和引用型別的互化即裝...