簡體   English   中英

庫中的 C# Func<> 代表

[英]C# Func<> delegates in library

來自 .NET 更高版本的通用 Func<> 和 Action<> 代表非常吸引人,並且在許多地方都證明了這些可以很容易地在針對 .NET 2.0 的代碼中重新創建,例如這里

然而,從針對 .NET 2.0 的庫的角度來看,它可能被針對任何更高版本的 .NET 構建的應用程序使用,這是如何疊加的。 在庫中實現這個“兼容性層”是否絕對會導致沖突(在私有和公共接口方面),或者有沒有辦法使這項工作獨立於消費應用程序構建的目標框架?

如果這是一個非入門者,最好:A)定義一組相同的具有不同名稱的參數化代表? 或.. B)嚴格遵守 .NET 2.0 約定,並根據需要定義新的委托類型?

顯而易見的事實是Func<>Action<>是個好主意 它們使您的代碼更易於閱讀,並且避免了令人震驚的大量雜亂的樣板委托聲明。 這就是您要使用它們的原因

所以你想要使用這種非常吸引人的編程風格,它是一種標准技術,現在幾乎普遍使用而不是舊方式,但你不能使用它,因為你的目標是框架的舊版本。 你該怎么辦?

你有三個選擇:

  1. 使用該功能之前常用的編程風格
  2. 在精神上將該功能添加到您自己的代碼中,但名稱不沖突
  3. 使用“真實”名稱但在您自己的命名空間中將該功能添加到您自己的代碼中

使用舊的編程風格放棄了我們從該功能中獲得的所有好處。 這是一個很大的犧牲。 但也許你所有的合作開發者都習慣了這種編程風格。

使用名稱不沖突的功能似乎很明智。 人們將能夠閱讀代碼並從這些特性中受益,但沒有人會因為它們看起來不是它們而感到困惑。 當您最終准備好升級時,您必須修補名稱。 幸運的是Ctrl+R,Ctrl+R讓這變得非常容易。

使用與標准功能同名的功能意味着您的代碼可以針對舊版本,但似乎正在使用新功能。 似乎是雙贏。 但這可能會導致混淆,並且您必須小心您的類型不會暴露給其他未知程序集,這可能會導致源代碼級編譯問題。 因此,您必須小心並完全清楚正在發生的事情。 但它可以有效地工作。

您必須根據您的需要選擇適合您的情況的任何方法。 每個人都沒有一個正確的答案,只有權衡取舍。

暫無
暫無

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

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