代码合同检查线程亲和力 - 好主意?

时间:2011-04-03 09:38:24

标签: c# .net wpf code-contracts

我正在尝试学习代码合同,并了解它们的用途。

我有一个WPF应用程序,所以很多代码都必须在UI线程上独占运行。期望从UI线程调用相当多的实用程序类。

这是不错的主意,所以通过我的代码洒这些?为什么是/否?

Contract.Requires(Thread.CurrentThread == Application.Current.Dispatcher.Thread);

静态检查器是否能够可靠地检查这些?

感谢您的任何意见!

3 个答案:

答案 0 :(得分:2)

您的合同应该与您的代码有关。 Dispatcher和Thread类不是你的,他们没有自己的合同守护。

所以不,静态检查器根本无法检查这个。

运行时检查可能有效,但它们对已经内置到库中的Debug检查几乎没有什么作用。

答案 1 :(得分:1)

方法的合同是“对于特定的有效输入,给定的方法将产生有效的输出”

在您的情况下,您没有验证方法的输入。这就是为什么我不建议使用这种方法。

换句话说,这不是契约,只是某种验证/断言。

答案 2 :(得分:1)

我认为你想要进行这些亲和力检查是正确的。它们是提前发现细微错误的好方法,但不能通过 Henk decyclone 提及代码合同进行静态检查。

我有一个名为Ensure的静态类,其方法Ensure.OnUiThread()包含与您提及的完全相同的检查。我用[Conditional("DEBUG")]标记这一点,以免减慢/膨胀生产代码。适合我。