【问题标题】:How do I use code contracts in .NET 4.0 without making my code look cluttered?如何在 .NET 4.0 中使用代码协定而不会使我的代码看起来杂乱无章?
【发布时间】:2011-06-27 10:42:03
【问题描述】:

我已经开始使用代码契约,并发现很难立即发现方法的“胆量”。

举这个(非常简单的)例子:

public static void UserAddNew(string domain, string username, string displayName)
{
    Contract.Assert(!string.IsNullOrWhiteSpace(domain));
    Contract.Assert(!string.IsNullOrWhiteSpace(username));
    Contract.Assert(!string.IsNullOrWhiteSpace(displayName));

    LinqDal.User.UserAddNew(domain, username, displayName);
}

现在我很想将合同放在一个区域中,以便将它们隐藏起来,但我担心我会失去一个很好的优势,即能够浏览该方法并了解它是什么预计。

您如何保持合同“整洁”?还是我太挑剔了?

【问题讨论】:

  • 可能重复:“如何向我的应用程序添加新功能而不会使我的代码看起来混乱?”
  • AFAICT,这不是新的或特定于代码合同的 - 该方法甚至在 CC 之前检查参数,不是吗?除了一点空白之外,我没有任何解决方案……
  • 我同意 Mormegil 的观点。在 CC 之前,你应该写“if(condition) throw new argumentexception”。
  • 只是一个相关说明,在这里使用 Contract.Requires() 而不是 Contract.Assert() 会更有意义。调用代码有所不同。

标签: c#-4.0 code-formatting code-contracts contracts


【解决方案1】:

查看 ContractClass 和 ContractClassFor 属性。这允许您在单独的程序集中使用代码协定编写类。这使您可以将合约用于开发工作,不会弄乱您的代码,也意味着您不必使用实时代码部署合约:

Contract Class Attribute

Contract Class For Attribute

【讨论】:

  • 没错,但这不适用于他在示例中使用的静态方法。
  • 另外:部署合同取决于您在代码合同属性窗格中使用的设置。在没有正确设置的情况下不部署合同只会给您带来麻烦。
  • 我假设开发人员会阅读有关如何使用该功能的文档。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多