ldstr在内部实现newobj吗?

m.e*_*son 6 .net c# il jit cil

众所周知,字符串是隐式实例化的,这意味着我们不必使用new它来获取对象的对象的引用.

因此,我一直认为框架正在处理这个问题,因此如果我这样做,我会得到相同的IL:

String first = new String(new char[] {'a'});
string second = "a";
Run Code Online (Sandbox Code Playgroud)

然而,似乎第一行是使用newobj instance void [mscorlib]System.String::.ctor(char[]) 和第二行完成的ldstr "a".

那么为了获得一个字符串引用,ldstr内部调用newobj,我在哪里可以看到规范/细节来支持它?

Bri*_*sen 8

ldstr根据文档为您提供文字字符串的引用(请记住默认情况下文字字符串是实例化的,因此它们只创建一次).第一个语句创建一个按预期string使用newobj指令的常规实例.