鉴于这个神奇的界面:
public interface IHat<out TRabbit>
{
TRabbit Take();
}
这个类的层次结构:
public class Rabbit { }
public class WhiteRabbit : Rabbit { }
我现在可以编译了:
IHat<WhiteRabbit> hat1 = null;
IHat<Rabbit> hat2 = hat1;
太棒了。但是,如果我以不同的方式定义接口(interface)会怎样:
public interface IHat<out TRabbit>
{
bool Take(out TRabbit r);
}
我表示帽子可能是空的,使用单独的 bool 返回值(以前的版本可能会从空帽子返回 null rabbit)。但我仍然只输出一只兔子,所以没有做任何逻辑上与以前版本不同的事情。
CTP 中的 C# 4.0 编译器在接口(interface)定义中给出错误 - 它要求“out”方法参数是不变类型。是否有明确的理由不允许这样做,或者是否有可能在未来版本中解决的问题?
最佳答案
很有趣。但是,在 CLI 级别没有“out”这样的东西——只有“ref”;有一个属性可以帮助编译器(用于明确分配),它说“你不需要传入它”。
也许这个限制是因为 CLI 没有“out”,只有“ref”。
关于c# - 在 C# 4.0 中,为什么方法中的输出参数不能协变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/527758/