2012-09-14 136 views
0

我需要在同一接口中使用泛型方法和非泛型方法。C#泛型方法歧義

public interface IBRClientActions<T> 
    where T : class 
{ 
    T add(T element); 
    Hashtable add(Hashtable hashtable); 

    void update(T element); 
    void update(Hashtable hashtable); 
} 

後,我在我的最後一個類實現其他接口,該接口與許多類型

public interface IBRClientActions : IBRClientActions<AdresseClient>, 
            IBRClientActions<Role>, 
            IBRClientActions<LienClient> 
{ 
    ... 
} 

我需要類似的東西

public class FinalClass : IBRClientActions 
{ 
    AdresseClient add(AdresseClient element) { ... } 
    Hashtable add**<AdresseClient>**(Hashtable hashtable) { ... } 
    .... 
} 

Hashtable add<AdresseClient>(Hashtable hashtable) { ... }是不可能 其實我有帶有Hashtable的方法中的模糊引用。

如何爲每種類型使用Hashtable添加方法?


編輯1

顯式接口實現

是的,這是一個可能性,但這種解決方案我必須在每次

Hashtable htRole = new Hashtable(); 
FinalClass myClass = new FinalClass(); 

/* not correct, ambiguity */ 
myClass.add(htRole); 

/* correct, no ambiguity but heavy writing (sorry for my bad english) */ 
((IBRClientActions<Role>)myClass).add(htRole); 

回答

3

我需要用投我的課泛型方法和非泛型方法在同一個接口中。

我不認爲這是問題,真的。我認爲真正的問題在於,您在同一個類中使用不同類型參數多次實現相同的通用接口。沒有這個方面,你在這裏沒有問題。

您可以使用顯式接口實現:

Hashtable IBRClientActions<Role>.add(Hashtable hashatable) 
{ 
    ... 
} 

但這很快變得難看。如果可能,我會盡量避免這樣做。嘗試使用組合而不是繼承。

還要注意:

  • 如果這是System.Collections.Hashtable,你或許應該使用System.Collections.Generic.Dictionary<,>如果可能的話
  • 方法名add不符合.NET命名約定