在同一个类上多次使用通用接口

Mar*_*son 7 c# generics multiple-inheritance

我有一个界面

interface IInterface<E>{
    E Foo();
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个这样的类

class Bar : IInterface<String>, IInterface<Int32> {
}
Run Code Online (Sandbox Code Playgroud)

这实际上工作得很好,除了我需要使用接口显式定义两个函数之一,如下所示:

class Bar : IInterface<String>, IInterface<Int32> {
    String Foo();
    Int32 IInterface<Int32>.Foo();
}
Run Code Online (Sandbox Code Playgroud)

缺点是我每次想要到达具有显式接口的Foo()时都必须进行转换.

处理此问题时的最佳做法是什么?

我正在做一个非常依赖于性能的应用程序,所以我真的不想每秒进行一百万个强制转换.这是JIT会弄明白的东西,还是应该存储一个实例的版本?

我没有尝试过这个特定的代码,但它看起来非常接近我正在做的事情.

Pao*_*sco 12

您不能按返回类型覆盖,但如果您想避免强制转换,则可以将返回类型转换为out参数:

interface IInterface<E> {
    void Foo(out E result);
}

class Bar : IInterface<string>, IInterface<int> {
    public void Foo(out string result) {
        result = "x";
    }
    public void Foo(out int result) {
        result = 0;
    }
}

static void Main(string[] args) {
    Bar b = new Bar();
    int i;
    b.Foo(out i);
    string s;
    b.Foo(out s);
}
Run Code Online (Sandbox Code Playgroud)