2013-12-09 46 views
6

我是新來的代表概念。我已經瞭解到它與C++中的指針類似。它的優點是提到代表的有效使用可以提高性能。代表如何提高應用程序的性能?

考慮到它是一個指針。它如何提高應用程序的性能?

如果有人可以用一個簡單的例子來解釋這個,那會很有幫助。

+4

你在哪裏讀到「它提高了應用程序的性能?」 – dbw

+1

http://www.codeproject.com/Articles/11657/Understanding-Delegates-in-C – thevan

+4

不要相信你讀的所有東西。代表不打算提高性能。它們旨在提供一個非常乾淨,美觀的回調模式。 –

回答

4

代表不是直接關於提高性能 - 他們是關於抽象調用。用C++來說,它確實就像一個方法指針。

代表的大部分用途是與性能無關。讓我們從一開始就明確這一點。

然而,這可以用來幫助性能的一個主要時間是,這允許像元編程這樣的場景。代碼(通常是庫代碼)可以根據配置信息在運行時構建複雜的行爲鏈,然後通過Expression,TypeBuilderDynamicMethod(或基本上允許您構建IL的任何API)中的任何一個將該信息編譯成方法。但是對於調用這種動態生成的方法,您需要一個委託 - 因爲您從C#編譯的靜態IL無法引用當時不存在的方法。

請注意,另一種方法是使用TypeBuilder創建(在運行時)從子類繼承或實現已知接口的新類型,然後創建動態生成類型的實例,該實例可以是以通常方式投射到預期的API並正常調用。

2

代表沒有對應用程序的性能顯著正面或負面影響。他們提供的是一種將應用程序的各個方面彼此分離的手段。

假設您有類A調用B.foo()的情況。 A現在部分耦合到B。您可能會遇到B需要撥打A.bar()的情況。你現在冒險將兩者緊密結合在一起。如果不是將A暴露給B,而是將bar作爲委託提供,那麼您已經刪除了該耦合。