CLR内部字符串常量吗?

时间:2019-02-12 22:11:34

标签: .net clr

最近我一直在阅读字符串实习生池的工作方式。但是我找不到这个问题的答案。

如果我声明一个常量字符串变量,例如const string STR = "foo";,这是否还会添加到内部表中?

2 个答案:

答案 0 :(得分:1)

只是要清理一下... CLR不参与字符串实习。实习是一个编译时概念,CLR中的R是运行时。

此外,不对字符串变量进行实习。字符串 literals 被屏蔽。字符串文字是右边的内容,例如

var variable = "This is a literal.";

当编译器注意到您的代码中包含字符串文字时,它必须将其添加到嵌入在程序集中的资源表中。添加它时,它会检查它是否已经存在,如果存在,则仅使用现有条目。编译完成后,整个表将被发送到程序集中,您的代码可在运行时在其中读取它。

答案 1 :(得分:1)

您可以找到:

const string STR = "foo";

string internedFoo = String.IsInterned("foo");    
if (internedFoo != null)  // yes it is !

在您可以找到的任何版本的框架中,答案都是肯定的,但它取决于实现。并且有obscure setting要关闭实习。