今天早些时候的一次讨论让我质疑我对原语和文字的理解是否正确。
我的理解是,文字类型特别是一种可以使用人类和编译器都可以理解的符号分配值的类型,而无需特定的类型声明:
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 是一种支持文字的引用类型。自定义结构是不支持文字的复合值类型。
我的理解(如果不是我的解释)在很大程度上是正确的吗?
更新:感谢伟大的信息和对话!对于任何发现此问题的人,请务必阅读评论和答案,这里有一些很好的说明以及一些有趣的旁注。
顺便说一句:哪个答案真正值得获得绿色大支票是一个折腾。我将其提供给不幸被否决的答案,该答案不仅包含一个不错的答案,而且在评论线程中包含许多澄清和信息。公平地说,这里没有一个最佳答案,至少有三个:)