8

我有一个界面

interface IInterface<E>{
    E Foo();
}

然后我创建一个这样的类

class Bar : IInterface<String>, IInterface<Int32> {
}

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

class Bar : IInterface<String>, IInterface<Int32> {
    String Foo();
    Int32 IInterface<Int32>.Foo();
}

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

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

我正在做一个非常依赖性能的应用程序,所以我真的不想每秒进行一百万次投射。这是 JIT 会解决的问题,还是我应该自己存储实例的铸造版本?

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

4

1 回答 1

14

您不能通过返回类型覆盖,但如果您想避免强制转换,您可以将返回类型转换为 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);
}
于 2012-07-11T11:40:24.597 回答