Некоторые неизменяемые ссылочные типы имеют предопределенные экземпляры для «пустых» значений.Например, String определяет String.Empty.Это сделано потому, что действительная строка - даже без символов - должна ссылаться на действительный объект кучи, но если существует тысяча пустых переменных строки, все они могут ссылаться на один и тот же объект кучи.Если приложение не использует пустые строки вообще, создание одного экземпляра пустой строки при запуске приложения и предоставление возможности его совместного использования всем, кто нуждается в пустой строке, будет более эффективным, чем создание нового объекта пустой строки каждый раз.нужен один.
С типами значений такого преимущества не будет.Хотя объявлены некоторые константы типа-значения (например, Math.Pi), их объявление для удобства, а не эффективности.Сказать «myDouble = Math.Pi» не более эффективно, чем «MyDouble = 3.14159265358979323846264338327950288419716939937510 #» - это просто легче читать и проверять (если бы кто-нибудь взглянул на приведенный выше код, если бы первые «328» были опечатаны как «238»)?Если кто-то хочет, чтобы константа с плавающей точкой равнялась нулю, самой естественной и удобной для чтения нотацией было бы просто 0 #.