具体类型/通用接口

时间:2013-11-01 11:47:31

标签: generics interface

第一个例子有效,

public interface IFoo 
{
    int DoThing(int request);
}

public class Foo : IFoo
{
    public int DoThing(int a) 
    {
        return 1;
    }
}

public class FooFactory<TResult, TRequest>
{
    public IFoo Create() 
    {
        return new Foo();
    }
}

但是第二个泛型示例不起作用

public interface IFoo<TResult, TRequest> 
{
    TResult DoThing(TRequest request);
}

public class Foo : IFoo<int, int>
{
    public int DoThing(int a) 
    {
        return 1;
    }
}

public class FooFactory<TResult, TRequest>
{
    public IFoo<TResult, TRequest> Create() 
    {
        return new Foo();
    }
}

给出错误:

Cannot implicitly convert type Foo to IFoo<TResult, TRequest>

在第一个例子中,Foo具有IFoo的行为,所以一切都很好,但是在第二个例子中,Foo是否也表现出泛型IFoo的行为?

1 个答案:

答案 0 :(得分:1)

在第二个示例中,您返回的new Foo()类型为IFoo<int,int>,但方法声明表明您应该返回IFoo<TResult,TRequest>

所以如果你这样做了:

public class FooFactory
{
    public IFoo<int, int> Create() 
    {
        return new Foo();
    }
}