3

我最近一直在研究 DbC 和 Spec#,它们似乎支持不可为空的对象。不幸的是,Spec# 似乎已被放弃。

  1. Spec# 似乎内置了很多不错的语言特性,为什么它被放弃了?
  2. 默认情况下让所有对象都不可为空会有什么问题,所以你必须写 int?, string?甚至MailMessage?如果你真的想要一个可为空的对象?
  3. 我在这里看到了一种 Sql 类比,您可以将类属性检查为可空或不可空。您甚至可以像使用 sql 表列那样对属性施加约束吗?

我没有看到将此类功能内置到语言中的问题。有人可以启发我吗?

4

1 回答 1

7

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

使其成为库而不是语言功能的好处是,它可以立即以所有语言提供,而无需语言团队进行任何工作。显然也有缺点...

链接:

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

public Stream! Foo(string! x)

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

于 2009-01-28T09:52:37.380 回答