第一个例子工程,混凝土式/通用接口
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的行为。
如果这个工作,想象下面的代码:'VAR一个=新FooFactory <字符串,字符串>(); var b = a.Create();'因为'a'是'FooFactory','b'的类型是'Create'的返回类型,它是'IFoo ',但该函数实际上会返回'IFoo '。你可以做的就是返回(IFoo )新的Foo();',然后它会编译并抛出一个运行时无效的转换异常,如果你在我的例子中使用不当的话。通常,你不想这样做,因为你想在编译时捕获类型不匹配。 –
svinja
这是用于C#的吗?请将语言标记添加到您的问题 – Bohemian
这是针对C#的,我该如何着手创建返回类型未知的FooFactory?所以创建可能会返回一个IFoo或一个IFoo - 这就是为什么返回类型是IFoo –
user1054637