【发布时间】:2010-10-06 09:06:14
【问题描述】:
鉴于这个神奇的界面:
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”方法参数为不变类型。是否有明确的理由为什么不允许这样做,或者是否有可能在未来的版本中解决?
【问题讨论】:
标签: c# c#-4.0 covariance out