public interface IShape{}
public class Rectangle : IShape{}
public class Base{}
public class Derived : Base{}
public interface IFoo<out T, in U>
where T : IShape
where U : Base
{
T Convert(U myType);
}
public class MyFoo : IFoo<Rectangle, Derived>
{
public Rectangle Convert(Derived myType)
{
throw new NotImplementedException();
}
}
class Program
{
static void Main(string[] args)
{
IFoo<IShape, Base> hmm = new MyFoo();
}
}
鉴于上面的代码,编译器无法确定如何将类型分配MyFoo
给IFoo<IShape, Base>
,大概是因为U
设置为 out 意味着它可以接受更少的派生。但是,Derived
是 比 更派生Base
,因此会产生编译器错误。
这个例子是人为的,但我们正在处理的实现是MyFoo
从工厂返回的。
虽然U
用作参数,但在尝试将其分配给通用接口时它也是一个输出,但我无法在out
此处使用关键字。我们如何解决这个问题?