Сегодняшнее обсуждение привело меня к вопросу о том, правильно ли я понимаю приматы и литералы.
Мое понимание состоит в том, что тип литерала - это конкретно тип, который может иметь значение, назначенное с помощью обозначения, которое может понимать как человек, так и компилятор без конкретных объявлений типа:
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
Наконец (и это вопрос, который, в свою очередь, заставил меня задавать вышеуказанные вопросы): Мое понимание заключается в том, что тип является примитивным или литеральным, нет прямого отношения к тому, является ли он значением или ссылочным типом.
Например, System.String является ссылочным типом, который поддерживает литералы. Пользовательские структуры представляют собой составные типы значений, которые не поддерживают литералы.
Является ли мое понимание (если не моим объяснением) по большей части правильным?
Обновление: Спасибо за отличную информацию и разговоры! Для тех, кто найдет это, обязательно прочитайте комментарии, а также ответы, там появятся некоторые большие разъяснения, а также несколько интересных примечаний.
btw: это топор, между которым ответ действительно заслуживает того, чтобы получить большой зеленый чек. Я даю это, к сожалению, нисходящий ответ, который содержит не только достойный ответ, но и многое разъяснение и информацию в комментариях. Чтобы быть справедливым, здесь нет ни одного лучшего ответа, там как минимум три:)