今日の初めの議論で、私はプリミティブとリテラルの理解が正しいかどうか疑問に思いました。
私の理解では、リテラル型は具体的には、特定の型宣言なしで人間とコンパイラの両方が理解できる表記法を使用して値を割り当てることができる型です。
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は、リテラルをサポートする参照型です。カスタム定義の構造体は、リテラルをサポートしない複合値タイプです。
私の理解(私の説明ではないにしても)はほとんどの部分で正しいですか?
更新:素晴らしい情報と会話をありがとう!これを見つけた人は、コメントと回答を必ず読んでください。いくつかの優れた説明といくつかの興味深いサイドノートがあります。
ところで:それは、大きな緑色のチェックを取得するのに本当に値する答えの間のトスアップです。残念ながら、まともな回答だけでなく、コメントスレッドに多くの説明と情報が含まれている、反対意見の回答にそれを与えています。公平を期すために、ここに最良の答えは1つではなく、少なくとも3つあります:)