我是新來的代表概念。我已經瞭解到它與C++中的指針類似。它的優點是提到代表的有效使用可以提高性能。代表如何提高應用程序的性能?
考慮到它是一個指針。它如何提高應用程序的性能?
如果有人可以用一個簡單的例子來解釋這個,那會很有幫助。
我是新來的代表概念。我已經瞭解到它與C++中的指針類似。它的優點是提到代表的有效使用可以提高性能。代表如何提高應用程序的性能?
考慮到它是一個指針。它如何提高應用程序的性能?
如果有人可以用一個簡單的例子來解釋這個,那會很有幫助。
代表不是直接關於提高性能 - 他們是關於抽象調用。用C++來說,它確實就像一個方法指針。
代表的大部分用途是與性能無關。讓我們從一開始就明確這一點。
然而,這可以用來幫助性能的一個主要時間是,這允許像元編程這樣的場景。代碼(通常是庫代碼)可以根據配置信息在運行時構建複雜的行爲鏈,然後通過Expression
,TypeBuilder
或DynamicMethod
(或基本上允許您構建IL的任何API)中的任何一個將該信息編譯成方法。但是對於調用這種動態生成的方法,您需要一個委託 - 因爲您從C#編譯的靜態IL無法引用當時不存在的方法。
請注意,另一種方法是使用TypeBuilder
創建(在運行時)從子類繼承或實現已知接口的新類型,然後創建動態生成類型的實例,該實例可以是以通常方式投射到預期的API並正常調用。
請不要提供* link-only *答案。鏈接可能會隨着時間變得不可用,所以很高興添加一些評論,即使鏈接將被打破,你的回答也將很有價值 –
@lazyberezovsky Ok –
@lazyberezovsky你在說什麼? –
代表沒有對應用程序的性能顯著正面或負面影響。他們提供的是一種將應用程序的各個方面彼此分離的手段。
假設您有類A
調用B.foo()
的情況。 A
現在部分耦合到B
。您可能會遇到B
需要撥打A.bar()
的情況。你現在冒險將兩者緊密結合在一起。如果不是將A
暴露給B
,而是將bar
作爲委託提供,那麼您已經刪除了該耦合。
你在哪裏讀到「它提高了應用程序的性能?」 – dbw
http://www.codeproject.com/Articles/11657/Understanding-Delegates-in-C – thevan
不要相信你讀的所有東西。代表不打算提高性能。它們旨在提供一個非常乾淨,美觀的回調模式。 –