我一直在 VS2008 ( http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx )上玩代码合同。
它们肯定很好,并且为方法内部的 if-then-throw 检查提供了可靠的替代方案。
尽管如此,我一直希望它们能够满足我强烈认为不可为空的引用类型的需求。
唉,据我所见,情况似乎并非如此。
这是我的理解:
这样的事情仍然会在运行时引起问题:
MyClass a = null;
a.ToString();我仍然必须明确地编写检查,即使是以更简洁和流线型的方式。
除非您使用 VS Team System,否则您只能在运行时使用代码契约来检查事物,在编译时没有任何好处。
这意味着当出现问题时,您仍然必须处理事情。
与处理简单的异常没有太大区别。即使使用 VSTS 静态分析也不如在运行时完成的那样好。
这是完全可以理解的,但它仍然是此功能适用于运行时使用的另一个迹象。
如果我错了,请纠正我,但据我所知,代码合同无法让我的生活更轻松,我的程序更健壮,就像不可为空的引用类型一样。
不要误会我的意思,我不喜欢代码合同。
它们是对整个框架的一个非常好的增强。
只是如果这不能填补 C# 由于没有不可为空的引用类型而留下的空白,那么在这一点上恐怕什么都不会。
你怎么看?