gpt4 book ai didi

.net - 在 C# 中,术语 "Primitive"和 "Literal"可以互换吗?

转载 作者:行者123 更新时间:2023-12-04 00:36:58 26 4
gpt4 key购买 nike

今天早些时候的一次讨论让我质疑我对原始和文字的理解是否正确。

我的理解是,文字类型具体是一种类型,它可以使用人类和编译器都可以理解的符号分配值,而无需特定类型声明:

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 是支持文字的引用类型。自定义结构是不支持文字的复合值类型。

我的理解(如果不是我的解释)在很大程度上是正确的吗?

更新:感谢您提供的精彩信息和对话!对于发现这一点的任何人,请务必阅读评论和答案,这里有一些很好的说明以及一些有趣的旁注。

顺便说一句:这是一个折腾,答案真的应该得到大绿支票。我将其提供给不幸被低估的答案,该答案不仅包含一个体面的答案,而且在评论线程中包含大量说明和信息。公平地说,这里没有一个最佳答案,至少有三个 :)

最佳答案

我想你没有提到的一件事是空间和分配。除了您提到的字符串类型(字符串类在堆上分配空间)之外,原语是值类型并在堆栈上分配(只要它们不与对象关联)。

尽管对象本身包含原语,但存储驻留在实际对象分配的位置,即在堆上。

除此之外,你的陈述写得很好。你有没有我错过的具体问题:)?

关于.net - 在 C# 中,术语 "Primitive"和 "Literal"可以互换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com