Dan*_*ker 16 c# out covariance c#-4.0
鉴于这个神奇的界面:
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'方法参数为不变类型.是否有一个强硬的原因,为什么不允许这样做,或者是否可以在未来版本中解决这个问题?
有趣.但是,在CLI级别没有"out"这样的东西 - 只有"ref"; 有一个属性可以帮助编译器(对于明确的赋值)说"你不需要传入它".
也许这个限制是因为CLI没有"out",只有"ref".
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |