鉴于这个神奇的界面:
public interface IHat<out TRabbit>
{
TRabbit Take();
}
而这个类层次结构:
public class Rabbit { }
public class WhiteRabbit : Rabbit { }
我现在可以编译这个:
IHat<WhiteRabbit> hat1 = null;
IHat<Rabbit> hat2 = hat1;
这是伟大的。但是如果我以不同的方式定义接口怎么办:
public interface IHat<out TRabbit>
{
bool Take(out TRabbit r);
}
我表示帽子可能是空的,使用单独的布尔返回值(以前的版本可能会从空帽子返回空兔子)。但我仍然只输出一只兔子,所以没有做任何与以前版本在逻辑上不同的事情。
CTP 中的 C# 4.0 编译器在接口定义中给出错误 - 它要求“out”方法参数为不变类型。是否有一个明确的理由为什么不允许这样做,或者它可能会在未来的版本中解决?