我正在尝试学习代码合同,并了解它们的用途。
我有一个WPF应用程序,所以很多代码都必须在UI线程上独占运行。期望从UI线程调用相当多的实用程序类。
这是不错的主意,所以通过我的代码洒这些?为什么是/否?
Contract.Requires(Thread.CurrentThread == Application.Current.Dispatcher.Thread);
静态检查器是否能够可靠地检查这些?
感谢您的任何意见!
答案 0 :(得分:2)
您的合同应该与您的代码有关。 Dispatcher和Thread类不是你的,他们没有自己的合同守护。
所以不,静态检查器根本无法检查这个。
运行时检查可能有效,但它们对已经内置到库中的Debug检查几乎没有什么作用。
答案 1 :(得分:1)
方法的合同是“对于特定的有效输入,给定的方法将产生有效的输出”。
在您的情况下,您没有验证方法的输入。这就是为什么我不建议使用这种方法。
换句话说,这不是契约,只是某种验证/断言。
答案 2 :(得分:1)
我认为你想要进行这些亲和力检查是正确的。它们是提前发现细微错误的好方法,但不能通过 Henk 和 decyclone 提及代码合同进行静态检查。
我有一个名为Ensure
的静态类,其方法Ensure.OnUiThread()
包含与您提及的完全相同的检查。我用[Conditional("DEBUG")]
标记这一点,以免减慢/膨胀生产代码。适合我。