對不起,如果這是一個騙局,但我似乎無法得到正確的組合的關鍵字來過濾掉各種類型約束和泛型問題(因爲有很多)。非嚴格的多接口類型參數約束?
我有兩個接口 - 我們稱之爲IOnline和IOffline。
他們密切相關,他們描述幾乎相同的合同,但他們之間的主要區別之一是具體實施將被使用的上下文。這不完全是我的情況,但它很好地說明了這個問題。
然後我有一些方法可以對付這些接口的具體實現者。有時這些方法只想處理一種類型而不處理另一種類型。
很簡單:
public void DoStuff<T>(string foo) where T : IOnline {}
起腳正在實施,可以在任一類型的操作方法的代碼。我認爲這是正確的,但在閱讀編譯錯誤時,我期望該約束將被解釋爲「允許任何類型T在這裏通用,如果它們實現IOnline或IOffline」,實際上被解釋爲「允許任何類型T一般在這裏使用,如果他們實施兩個「。
public void DoStuff<T>(string foo) where T : IOnline, IOffline {}
試圖執行具有相同名稱的兩種不同的方法,但由於有明顯的不確定性問題,不同的約束失敗 - 走,並非因爲超載參數列表是相同的(因爲所需的行爲是相同的)。
我可以使用兩種不同的方法兩個不同的名字,每一個相應的約束,但似乎缺憾,使其他的事情下游是在屁股...可行的痛苦,但效果並不理想。
我覺得我必須有一些我在這裏失蹤的東西......我在普通的土地上感到非常舒適,但這是我第一次完成我所追求的事情,我覺得我'我正在旋轉我的輪子atm。
說實話,我最近才知道C#支持接口繼承。在十年的開發工作中,這種需求從未出現過。將不得不給這個旋風,看看它是否最終讓我在我需要的地方。 – bakasan 2009-12-12 00:48:33