[英]C# Func<> delegates in library
來自 .NET 更高版本的通用 Func<> 和 Action<> 代表非常吸引人,並且在許多地方都證明了這些可以很容易地在針對 .NET 2.0 的代碼中重新創建,例如這里。
然而,從針對 .NET 2.0 的庫的角度來看,它可能被針對任何更高版本的 .NET 構建的應用程序使用,這是如何疊加的。 在庫中實現這個“兼容性層”是否絕對會導致沖突(在私有和公共接口方面),或者有沒有辦法使這項工作獨立於消費應用程序構建的目標框架?
如果這是一個非入門者,最好:A)定義一組相同的具有不同名稱的參數化代表? 或.. B)嚴格遵守 .NET 2.0 約定,並根據需要定義新的委托類型?
顯而易見的事實是Func<>
和Action<>
是個好主意。 它們使您的代碼更易於閱讀,並且避免了令人震驚的大量雜亂的樣板委托聲明。 這就是您要使用它們的原因。
所以你想要使用這種非常吸引人的編程風格,它是一種標准技術,現在幾乎普遍使用而不是舊方式,但你不能使用它,因為你的目標是框架的舊版本。 你該怎么辦?
你有三個選擇:
使用舊的編程風格放棄了我們從該功能中獲得的所有好處。 這是一個很大的犧牲。 但也許你所有的合作開發者都習慣了這種編程風格。
使用名稱不沖突的功能似乎很明智。 人們將能夠閱讀代碼並從這些特性中受益,但沒有人會因為它們看起來不是它們而感到困惑。 當您最終准備好升級時,您必須修補名稱。 幸運的是Ctrl+R,Ctrl+R讓這變得非常容易。
使用與標准功能同名的功能意味着您的代碼可以針對舊版本,但似乎正在使用新功能。 似乎是雙贏。 但這可能會導致混淆,並且您必須小心您的類型不會暴露給其他未知程序集,這可能會導致源代碼級編譯問題。 因此,您必須小心並完全清楚正在發生的事情。 但它可以有效地工作。
您必須根據您的需要選擇適合您的情況的任何方法。 每個人都沒有一個正確的答案,只有權衡取舍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.