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

ter*_*tyl 3 design-by-contract spec# non-nullable

我最近一直在看DbC和Spec#似乎支持非可空对象.不幸的是,Spec#似乎已被抛弃.

  1. Spec#似乎内置了许多不错的语言功能,为什么它被抛弃了?
  2. 默认情况下让所有对象都不可为空可能有任何问题所以你必须写int?,string?甚至MailMessage?如果你真的想要一个可以为空的对象?
  3. 我在这里看到类似的Sql类比,你可以将类属性检查为可空或不可空.您是否可以使用sql表列对属性进行约束?

我没有看到在语言中内置这样的功能的问题.有人能开导我吗?

Jon*_*eet 7

你见过新的合同框架吗?将成为.NET 4.0的一部分?

使它成为一个库而不是语言特性的好处是它可以立即以所有语言提供,而语言团队则无需工作.显然也有缺点......

链接:

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

public Stream! Foo(string! x)
Run Code Online (Sandbox Code Playgroud)

同样,表明Foo不能接收空引用,也不会返回一个引用.有语法的额外位的只是该类型的合同将是得心应手,我想.