2011-06-28 33 views
8

.NET更新版本的代理非常吸引人,並且很多地方已經證明這些代碼很容易在.NET 2.0代碼中重新創建,如here。然而,從一個面向.NET 2.0的庫的角度來看,它可能會被針對任何更高版本的.NET構建的應用程序所使用,這是如何實現的。在庫中實現這個「兼容性層」絕對是衝突的一個方法(無論是在私有和公共接口方面),還是有辦法使這個工作獨立於消費應用程序構建的目標框架?C#Func <>委託庫中的代碼

如果這是一個非啓動器,是否會更好: A)定義一組具有不同名稱的參數化代表?或.. B)嚴格遵守.NET 2.0約定,並根據需要定義新的委託類型?

+5

如果您正在構建以.NET 2.0爲目標的庫,請嘗試在可能的情況下使用框架中的現有委託。否則,在任何情況下都可以命名它們,或者創建「通用」代表來鏡像.NET 3.0及更高版本中的代表。那隻會導致混亂。由於兼容代理可以相互轉換,因此兼容性層不再需要。 –

回答

6

顯而易見的事實是,Func<>Action<>好主意。它們讓你的代碼更容易閱讀,並且避免了大量雜亂的樣板代表聲明。 這就是爲什麼你要使用他們

所以你有這個真正有吸引力的編程風格你想使用,這是一種標準的技術,現在幾乎普遍使用,而不是舊的方式,但你不能使用它,因爲你的目標是舊版本的框架。你該怎麼辦?

你有三種選擇:

  1. 使用的編程風格,這是常用的功能之前
  2. 添加的功能,你自己的代碼中精神,但與非衝突名稱
  3. 添加功能添加到您自己的代碼中,並使用「真實」名稱,但是位於您自己的名稱空間中

使用舊的編程風格放棄了我們從該專長中欣賞到的所有優點URE。這是一個很大的犧牲。但是也許你所有的合作開發者都習慣了這種編程風格。

使用非衝突名稱的功能似乎足夠明智。人們將能夠閱讀代碼並從這些功能中受益,但是沒有人會對他們看起來不是那種東西感到困惑。當您終於準備升級時,您必須修補名稱。幸運的是Ctrl + R,Ctrl + R使得這樣做非常容易。

使用與標準功能具有相同名稱的功能意味着您的代碼可以定位舊版本,但似乎使用了更新的功能。看起來像雙贏。但是這可能會導致混淆,你必須小心,你的類型不會暴露給其他未知的程序集,可能會導致源代碼級別的編譯問題。所以你必須小心並且要清楚發生的事情。但它可以有效地工作。

您必須根據自己的需要選擇適合自己情況的方法。對每個人都沒有正確的答案,只有權衡。

+0

由於缺乏其他的答案告訴我,否則,我會假設這個問題沒有明智的解決方案。儘管這些權衡已經在我的腦海中了,但這是一個合理的答案。 –