鉴于这个神奇的界面:
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”方法参数为不变类型。是否存在不允许这样做的明确原因,或者是否可能在未来版本中解决?
有趣的。然而,在 CLI 级别,没有“out”这样的东西——只有“ref”;有一个属性可以帮助编译器(用于明确的赋值),它表示“您不需要将其传递”。
也许这个限制是因为 CLI 没有“out”,只有“ref”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)