如何解决在 C# 编译时,常量的连接是否被优化为连接形式?
我有两个常量,定义在同一个静态类中:
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
,也没有单独作为 ABC
,DEF
:
This post 很好读,但最终让我对我的问题感到困惑(可能是因为我缺乏 C++ 知识)。我看过其他几篇文章,但似乎并没有真正接近答案。
C# 是否优化了应用程序编译版本中两个常量的连接,任何/任何使用连接的地方?
注意:目标是进一步混淆 ABCDEF
的全部值,使其更难找到。
解决方法
是的,连接的字符串是 interned 参见:.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 也在这里回答:https://stackoverflow.com/a/288802/284240
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。