![]() |
1
3
这不是C#4.0的一个特性。这是CLR 4.0的一个独立于语言的功能,在IL级别工作。它确实有一些执行静态检查的能力,但不是针对每种情况。它实际上会分析普通编译器为您使用的任何语言生成的IL,找到您在代码中设置的约束,然后查看代码以确定它是否符合合同。静态检查(至少在我看过的演示中)是一个可选功能。 |
![]() |
2
1
我非常确定C#4.0中的代码契约内容将在运行时而不是编译时发生,并且您需要在调用中实际指定条件。假设你的Vector3类有一个Length属性,你最终会得到这样的结果:
这实际上会在某种编译后步骤中遇到一些IL重写,最终基本上会在尝试中包装方法的主体。最后,后条件测试在最终块中。 |