Что не так с объектами, которые не имеют значения NULL?

В последнее время я смотрю на DbC и SpeС#, которые, похоже, поддерживают объекты, не подлежащие обнулению. К сожалению, SpeС#, похоже, был оставлен.

  • У SpeС#, казалось, было много хороших функций языка, встроенных, так почему это было отказано?
  • Будет ли проблема с разрешением всем объектам по умолчанию не равно NULL, так что вам придется писать int?, string? и даже MailMessage? если вы действительно хотите объект с нулевым значением?
  • Я вижу подобную аналогию Sql здесь где вы можете проверить класс свойства как обнуляемые или недействительные обнуляемый. Не могли бы вы даже поставить ограничения на свойства, поскольку вы может со столбцами таблицы sql?

Я не вижу проблем с наличием таких функций, как встроенный в язык. Может ли кто-нибудь просветить меня на этом?

Ответ 1

Вы видели, что новая Контрактная структура будет частью .NET 4.0?

Преимущество создания библиотеки, а не языковой функции заключается в том, что она сразу становится доступной на всех языках, без работы со стороны языковых команд. Очевидно, есть и недостатки...

Ссылки:

Сказав все это, я бы хотел написать:

public Stream! Foo(string! x)

что указывает на то, что Foo не должен получать нулевую ссылку и не будет возвращать ее. Мне кажется, что иметь дополнительный бит синтаксиса для этого типа контракта.