不可为空的对象有什么问题?

时间:2009-01-28 09:49:39

标签: design-by-contract non-nullable spec#

我最近一直在关注DbC和Spec#似乎支持不可为空的对象。不幸的是,Spec#似乎已被抛弃。

  1. Spec#似乎内置了许多不错的语言功能,为什么它被抛弃?
  2. 默认情况下让所有对象都不可为空可能有任何问题,所以你必须写int?,string?甚至MailMessage?如果你真的想要一个可以为空的对象?
  3. 我在这里看到了类似的Sql类比 在哪里可以检查课程 属性可以为空或非空 空。你能放吗? 对你的属性的约束 可以用sql表列吗?
  4. 我没有看到在语言中内置这样的功能的问题。有人能在这方面给我启发吗?

1 个答案:

答案 0 :(得分:7)

您是否看到新的Contracts framework将成为.NET 4.0的一部分?

使其成为一个库而不是语言功能的好处是,它立即可用于所有语言,语言团队无需工作。显然也有缺点......

链接:

说了这么多,我希望能写下来:

public Stream! Foo(string! x)

同样,表明Foo不能接收空引用,也不会返回一个。我认为,为 这种类型的合同提供一些额外的语法会很方便。