0

我需要在同一个接口中使用泛型方法和非泛型方法。

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);
4

1 回答 1

3

我需要在同一个接口中使用泛型方法和非泛型方法。

我认为这不是问题,真的。我认为真正的问题是您在同一个类中使用不同的类型参数多次实现相同的通用接口。没有这方面,你不会有问题。

您可以使用显式接口实现:

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

但这很快就变得丑陋了。如果可能的话,我会尽量避免这样做。尝试使用组合而不是继承。

另请注意:

  • 如果是这样System.Collections.Hashtable,您可能应该System.Collections.Generic.Dictionary<,>尽可能使用
  • 方法名称add不符合 .NET 命名约定
于 2012-09-14T10:52:57.037 回答