1

第一个例子有效,

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 的行为?

4

1 回答 1

1

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

因此,如果您改为这样做:

public class FooFactory
{
    public IFoo<int, int> Create() 
    {
        return new Foo();
    }
}
于 2013-11-01T11:51:29.903 回答