鉴于这个神奇的界面:
public interface IHat<out TRabbit>
{
TRabbit Take();
}
Run Code Online (Sandbox Code Playgroud)
而这个类层次结构:
public class Rabbit { }
public class WhiteRabbit : Rabbit { }
Run Code Online (Sandbox Code Playgroud)
我现在可以编译这个:
IHat<WhiteRabbit> hat1 = null;
IHat<Rabbit> hat2 = hat1;
Run Code Online (Sandbox Code Playgroud)
哪个好.但是如果我以不同的方式定义界面呢:
public interface IHat<out TRabbit>
{
bool Take(out TRabbit r);
}
Run Code Online (Sandbox Code Playgroud)
我指出帽子可能是空的,使用单独的布尔返回值(之前的版本可能会从空帽子返回一个空兔子).但我仍然只输出一只兔子,所以没有做任何与以前版本逻辑上不同的事情.
CTP中的C#4.0编译器在接口定义中给出了错误 - 它要求'out'方法参数为不变类型.是否有一个强硬的原因,为什么不允许这样做,或者是否可以在未来版本中解决这个问题?