Ссылочные типы, не допускающие значения NULL (снова)

Было много вопросов относительно поддержки ссылочных типов, не допускающих значения NULL, в .NET. Большую надежду возлагали на контракты кода, но они ограничиваются проверкой времени выполнения для тех, у кого ограниченный бюджет.

Что касается подходов, отличных от кодовых контрактов, Джон Скит написал сообщение в блоге несколько лет назад, и один из комментаторов представил полезную на вид ненулевую структуру , которая имела IL изменен, чтобы отключить конструктор по умолчанию. Это кажется отличным подходом, и я могу представить его расширение для предоставления всех видов микротипов , не допускающих значения NULL . Манипуляция IL может быть этапом после сборки, запускаемым атрибутом в структуре, например.

//Microtype representing a non-zero age, so we want to disable the default ctor
[NoDefaultConstructor]
public struct Age
{
    public Age(int age)
    {
        // Implementation (including validation) elided
    }
} 

Прежде чем я исследую это дальше, я хотел бы спросить, знает ли кто-нибудь о каких-либо проблемах, которые это может вызвать? Я ничего не мог придумать.

5
задан Akash 10 October 2011 в 13:02
поделиться