Поскольку строка является ссылочным типом, а другие - нет. DateTime и Int должны иметь значения по умолчанию, они не могут быть нулевыми.
Что вам нужно понять, так это то, что компилятор создает переменную для хранения информации. В C # 3.0 вам не нужно явно объявлять его, но он все еще там, поэтому он создает переменную DateTime и переменную int и инициализирует их значениями по умолчанию, чтобы не вызвать ошибку компилятора. Со строкой это не нужно делать (инициализировать значение по умолчанию), потому что это ссылочный тип.