Ank*_*ana 0 c# string constants
为什么字符串类型允许使用常量?
因为字符串在堆中初始化,所以它们如何用作常量.编译器如何知道字符串的大小?什么是字符串表?是用于计算字符串长度的.
如果我在应用程序中使用字符串常量很多位置,它会增加内存消耗吗?
.NET团队可以继续前进并允许任意表达式用作常量 - 例如,new Vector2(0, 0)如果Vector2已知构造函数没有外部副作用,并且已知类型是结构或其他不可变的.但他们根本没有花时间去做这件事,也许是因为搞清楚这些要求对于编译器来说是额外的工作(记住,C#还没有immutable或pure关键字).
该string类型对于编译器和运行时来说是特殊的:它从一开始就被设计为不可变的,并且它的构造函数没有外部可观察的副作用,因此.NET运行时的创建者将这些知识融入到编译器中.这就是string文字和特殊待遇的原因.
尽管如此,他们可能还是希望避免在基础设施上教授太多特殊类型 - 只有少数几种基本类型,即基元和字符串.DateTime根本不被认为足够重要.