考虑以下代码:
using System;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var square = new Square(4);
Console.WriteLine(square.Calculate());
}
}
class MathOp
{
protected MathOp(Func<int> calc) { _calc = calc; }
public int Calculate() { return _calc(); }
private Func<int> _calc;
}
class Square : MathOp
{
public Square(int operand)
: base(() => _operand * _operand) // runtime exception
{
_operand = operand;
}
private int _operand;
}
}
(忽略类设计;我实际上并不是在编写计算器!此代码仅代表一个需要一段时间才能缩小范围的更大问题的最小重现)
我希望它能够:
- 打印“16”,或者
- 如果在这种情况下不允许关闭成员字段,则会引发编译时错误
相反,我在指定的行抛出了一个无意义的异常。在 3.0 CLR 上,它是空引用异常;在 Silverlight CLR 上,这是臭名昭著的操作可能会破坏运行时的稳定性。
这是一个已修复的编译器错误。该代码从一开始就不应该是合法的,如果我们要允许它,我们至少应该生成有效的代码。我的错。对于给您带来的不便,我们深表歉意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)