第一个例子有效,
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的行为?
答案 0 :(得分:1)
在第二个示例中,您返回的new Foo()
类型为IFoo<int,int>
,但方法声明表明您应该返回IFoo<TResult,TRequest>
。
所以如果你这样做了:
public class FooFactory
{
public IFoo<int, int> Create()
{
return new Foo();
}
}