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