相关疑难解决方法(0)

在C#4.0中,为什么方法中的out参数不能协变?

鉴于这个神奇的界面:

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'方法参数为不变类型.是否有一个强硬的原因,为什么不允许这样做,或者是否可以在未来版本中解决这个问题?

c# out covariance c#-4.0

16
推荐指数
1
解决办法
1821
查看次数

标签 统计

c# ×1

c#-4.0 ×1

covariance ×1

out ×1