В C # взаимозаменяемы ли термины «примитив» и «буквальный»?
Сегодняшняя дискуссия привела меня к вопросу о правильности моего понимания примитивов и литералов.
Насколько я понимаю, литеральный тип - это, в частности, тип, который может иметь значение, назначенное с использованием нотации, которую могут понять и человек, и компилятор без определенных объявлений типов:
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 - это ссылочный тип, который поддерживает литералы. Пользовательские структуры - это составные типы значений, которые не поддерживают литералы.
Правильно ли мое понимание (если не мое объяснение) по большей части?
Обновить: Спасибо за отличную информацию и разговоры! Любой, кто найдет это, обязательно прочитает комментарии, а также ответы, тамНесколько замечательных разъяснений, а также несколько интересных замечаний.
кстати: этоs ответ на вопрос, какой ответ действительно заслуживает того, чтобы получить большой зеленый чек. Я'Я даю его к, к сожалению, отрицательному ответу, который содержит не только достойный ответ, но и множество разъяснений и информации в ветке комментариев. Честно говоря, нетодин лучший ответ здесь, тамне менее трех :)