在 C# 中,常量的串联是否在编译时优化为串联形式?

Does concatenation of constants get optimized to the concatenated form at compile time in C#?

我有两个常量,定义在同一个静态class:

public static class MyConstants {
    public const string ABC = "ABC";
    public const string DEF = "DEF";
}

我在我的应用程序的其他地方以组合方式使用它们:

Console.WriteLine(MyConstants.ABC + MyConstants.DEF);

我正在尝试确定串联是否在编译时进行了优化,导致程序集在反汇编时在某个地址包含值 ABCDEF,或者它是否保持独立。我按照 this MSDN post 上的说明在控制台应用程序中查看我的代码的反汇编,它似乎没有存储为 ABCDEF,也没有单独存储为 ABCDEF :

This post 是一本好书,但最终让我对我的问题感到困惑(可能是因为我缺乏 C++ 知识)。我已经查看了其他几篇文章,但似乎并没有真正接近答案。


C# 是否优化了应用程序编译版本中两个常量的串联,any/everywhere 使用了串联?

注意:目标是进一步混淆 ABCDEF 的完整值,使其更难找到。

是的,连接后的字符串是 interned see: .NET-Fiddle

public class Program
{
    public static void Main()
    {
        string abcdef = MyConstants.ABC + MyConstants.DEF;
         if(string.IsInterned(abcdef) != null)
        {
            Console.Write("abcdef is interned");
        }
    }
}


public static class MyConstants {
    public const string ABC = "ABC";
    public const string DEF = "DEF";
}
 

我想 Jon 也在这里回答了这个问题: