为什么字符串类型允许使用常量?

时间:2017-07-14 04:19:37

标签: c# string constants

为什么字符串类型允许用作常量?

因为字符串在堆中初始化,所以它们如何用作常量。 编译器如何知道字符串的大小?什么是字符串表?用于计算字符串长度。

如果我在应用程序中使用字符串常量很多位置,是否会增加内存消耗?

3 个答案:

答案 0 :(得分:6)

.NET团队可以继续前进并允许任意表达式用作常量 - 例如new Vector2(0, 0)如果已知Vector2构造函数没有外部副作用,并且已知该类型是结构或其他不可变的。但是他们根本没有花时间去做这件事,也许是因为找出这些要求对于编译器来说是额外的工作(记住,C#还没有immutablepure个关键字。

string类型对于编译器和运行时来说是特殊的:它从一开始就被设计为不可变的,并且它的构造函数没有外部可观察的副作用,因此.NET运行时的创建者烘焙了这些知识进入编译器。这就是string有文字并得到特殊待遇的原因。

尽管如此,他们可能还是希望避免在基础设施上教授太多特殊类型 - 只有少数几种基本类型,即基元和字符串。仅仅DateTime被认为不够重要,不能被包括在内。

答案 1 :(得分:3)

  

常量可以是数字,布尔值,字符串或空引用。

     

常量表达式是一个可以在编译时完全计算的表达式。因此,引用类型常量的唯一可能值是字符串和空引用。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const

可以在编译时完全评估字符串。 DateTime不能。

答案 2 :(得分:1)

因为const字符串不被视为引用,所以它变为文字。