繁体   English   中英

是否将c#6.0 nameof()结果实现了?

[英]Is c# 6.0 nameof() result interned?

从我可以读到的编译器只发出一个字符串,没有其他真正发生?

有没有理由说这个电话会议的结果无法实现? 对于nameof(MyClass) ,如果它发生了很多,理论上它可能值得吗?

是的,它将像任何其他字符串文字一样被实习。

这可以通过这个TryRoslyn示例来演示,其中:

public void M() 
{
    Console.WriteLine(nameof(M));
}

符合此IL:

.method public hidebysig 
    instance void M () cil managed 
{
    // Method begins at RVA 0x2050
    // Code size 11 (0xb)
    .maxstack 8

    IL_0000: ldstr "M"
    IL_0005: call void [mscorlib]System.Console::WriteLine(string)
    IL_000a: ret
} // end of method C::M

您可以看到使用ldstr加载"M" ,这意味着它是ldstr

“公共语言基础结构(CLI)保证引用具有相同字符序列的两个元数据标记的两个ldstr指令的结果精确地返回相同的字符串对象(称为”字符串实习“的过程)。

来自OpCodes.Ldstr Field

这也可以通过运行此示例来验证,该示例打印为true

Console.WriteLine(ReferenceEquals(nameof(Main), nameof(Main)));

如果编译的输出是字符串文字,它将被实习。 字符串文字在.NET运行时中实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM