代码合同并确保不引发异常
我想知道如果我能够使用Microsoft Code Contracts来验证方法不会抛出任何异常的不变性。 用例如下:我有一个附有记录器的导入器,其中导入器使用导入器的基类来定义导入的各个阶段:
每个阶段都由该导入器基类的抽象方法表示。 我想确保每个阶段都不变,不会引发任何记录的异常。 Ergo,“读取文件”阶段应处理所有与文件访问有关的问题(例如DirectoryNotFoundException
),用记录器记录问题并返回null。
实质上,我们希望通过记录器来传递问题。 并根据问题的严重程度,放弃进口,继续而忽略问题。
我已经快速阅读了手册,但没有发现任何似乎可用于此的内容。 这是否可能? 或者这是不可能的,并且实际上我缺少一个很好的理由?
我不认为有可能验证它不会抛出任何异常,因为异常可能源自运行时本身; 考虑OutOfMemoryException或StackOverflowException。
事实上,我认为这就是为什么在一般情况下很难 - 如果您正确使用异常,那么它们通常会由程序的外部输入引起,因此无法验证。
(如果这个异常是由程序中的错误引起的,那么你可能可以使用前提条件来捕捉它)
其实,想一想,已经有一种编译器支持的方式来验证异常是被抛出还是被处理过......只是不在.NET中:D。 Java的检查异常似乎满足您的使用案例,但即使是Java自己的社区似乎也认为他们现在是个坏主意。
链接地址: http://www.djcxy.com/p/59601.html