Сегодняшнее обсуждение привело меня к вопросу о правильности моего понимания примитивов и литералов.
Насколько я понимаю, литеральный тип - это, в частности, тип, который может иметь значение, назначаемое с использованием нотации, которую может понять как человек, так и компилятор без специальных объявлений типа:
var firstName = "John"; // "John" is literal
var firstName = (string)"John"; // *if* the compiler didn't understand that "John"
// was a literal representation of a string then I
// would have to direct it as such
Я понимаю, что примитивы - это, по сути, элементарные типы данных, которые может понять компилятор, например, int:
int age = 25;
... литерал может быть не примитивным, например, поддержка VB9 для литералов XML. Пример нереального мира был бы, если System.Drawing.Point мог быть назначен с литералами:
Point somePoint = 2,2; // both X and Y are primitive values, however Point is a
// composite value comprised of two primitive values
Наконец (и этот вопрос, в свою очередь, побудил меня задать вышеупомянутые вопросы):
Я понимаю, что независимо от того, является ли тип примитивным или литеральным, нет прямого отношения к тому, является ли он типом Value или Reference.
Например, System.String - это ссылочный тип, который поддерживает литералы. Пользовательские структуры - это составные типы значений, которые не поддерживают литералы.
Правильно ли мое понимание (если не мое объяснение) по большей части?
Обновление: Спасибо за отличную информацию и разговоры! Любой, кто найдет это, обязательно прочитает комментарии, а также ответы, есть несколько замечательных разъяснений, а также несколько интересных дополнительных замечаний.
Между прочим: это вопрос, между ответом которого действительно стоит получить большой зеленый чек. Я даю его, к сожалению, с отрицательным ответом, который содержит не только достойный ответ, но и множество разъяснений и информации в ветке комментариев. Справедливости ради, здесь нет одного лучшего ответа, есть как минимум три:)