簡體   English   中英

.NET框架為什么要指定標准委托人(動作)?

[英]Why does the .NET framework specify standard delegates (Action)?

.NET框架為什么要指定標准委托人? 聲明一個新的委托類型很簡單,可以在一行代碼中完成。

public delegate void Something<T>(T obj);

他們為什么要定義所有其他類型(動作,動作等)?

目的是什么以及由此獲得什么?

http://msdn.microsoft.com/en-us/library/system.action.aspx

我想知道的另一件事是他們繼續定義17個版本,除了它們采用不同數量的類型參數之外,它們都是相同的。 但是為什么停在17點呢? 是什么導致這種決定?

因為他們想要為TPL以及Linq公開一些委托,所以他們創建了ActionAction<T>Func<>委托。

可枚舉類在方法數量中使用Func<>

Task類僅在Func<>Action<>委托的基礎上構建。

當他們在FW中暴露Linq時,有必要聲明代理類似PredicatePredicate ,它應該與Where子句一起操作,等等。 您可以在一行中聲明自己的委托。 但關鍵是你不能將你的委托傳遞給框架方法,因為框架在編譯時沒有你的委托。

因此,框架開發人員決定將這些標准委托添加到.Net框架本身中。

注意:您可以將自己的委托作為System.Delegate類型傳遞給“ BCL”類型,並且他們可以使用DynamicInvoke方法來調用它,但這實在是太過分了。 當處理降低性能的“ValueTypes”時,它需要裝箱/拆箱,而不僅僅是DynamicInvoke本身表現不佳的候選者。

如果一段代碼聲明:

public delegate void SingleArgumentMethod<T>(T obj);
DoSomething(SingleArgumentMethod<int> thingDoDo);

和其他一些代碼聲明:

public delegate void OneArgumentMethod<T>(T obj);
PerformAction(OneArgumentMethod<int> theAction);

然后因為SingleArgumentMethod<int>OneArgumentMethod<int>將是不相關的類型, DoSomething將沒有很好的方法將其接收的委托傳遞給PerformAction 相反,它必須產生一個實例OneArgumentMethod<int>使用從方法指針(多個)和靶(多個) thingToDo ,並傳遞到PerformAction 但是,如果這兩種方法都使用了相同的委托定義,則不需要這種復雜性, DoSomething可以簡單地調用PerformAction(thingToDo);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM