博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const string vs static readonly string
阅读量:4326 次
发布时间:2019-06-06

本文共 2254 字,大约阅读时间需要 7 分钟。

namespace BugQiang.Al {    public class ClassA1 {        public static readonly string STATIC_READONLY_STRING = "STATIC_READONLY_STRING";        public const string CONST_STRING = "CONST_STRING";    }}
using System;using BugQiang.Al;namespace BugQiang.B1 {    public class ClassB1 {        public static void ShowClassA1() {            Console.WriteLine("ClassA1.CONST_STRING = {0}\r\nClassA1.STATIC_READONLY_STRING = {1}",                ClassA1.CONST_STRING,                ClassA1.STATIC_READONLY_STRING);        }    }    class Program {        static void Main() {            ClassB1.ShowClassA1();        }    }}

编译并运行:

C:\Users\de\Desktop\bao>csc /t:library /nologo ClassA1.cs
C:\Users\de\Desktop\bao>csc /r:ClassA1.dll /nologo ClassB1.cs
C:\Users\de\Desktop\bao>ClassB1
ClassA1.CONST_STRING = CONST_STRING
ClassA1.STATIC_READONLY_STRING = STATIC_READONLY_STRING
C:\Users\de\Desktop\bao>

重新编辑ClassA1.cs

namespace BugQiang.Al {    public class ClassA1 {        public static readonly string STATIC_READONLY_STRING = "REBUILD_STATIC_READONLY_STRING";        public const string CONST_STRING = "REBUILD_CONST_STRING";    }}

重新编译ClassA1.cs,并运行ClassB1.exe:

C:\Users\de\Desktop\bao>csc /t:library /nologo ClassA1.cs

C:\Users\de\Desktop\bao>ClassB1
ClassA1.CONST_STRING = CONST_STRING
ClassA1.STATIC_READONLY_STRING = REBUILD_STATIC_READONLY_STRING

C:\Users\de\Desktop\bao>

????

反编译打开ClassB1.exe

C:\Users\de\Desktop\bao>ildasm

C:\Users\de\Desktop\bao>

打开ClassB1.exe后,view/metainfo/show! (Ctrl + M)

在metainfo的最底部有这么一节:

User Strings

-------------------------------------------------------
70000001 : (64) L"ClassA1.CONST_STRING = {0}\r\nClassA1.STATIC_READONLY_STRING = {1}"
70000084 : (12) L"CONST_STRING"

以及ClassB1.ShowClassA1对应的IL代码

.method public hidebysig static void  ShowClassA1() cil managed

{
  // Code size       23 (0x17)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "ClassA1.CONST_STRING = {0}\r\nClassA1.STATIC_READONL"
  + "Y_STRING = {1}"
  IL_0006:  ldstr      "CONST_STRING"
  IL_000b:  ldsfld     string [ClassA1]BugQiang.Al.ClassA1::STATIC_READONLY_STRING
  IL_0010:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object,
                                                                object)
  IL_0015:  nop
  IL_0016:  ret
} // end of method ClassB1::ShowClassA1

结束语:.NET字符串驻留机制

转载于:https://www.cnblogs.com/BugQiang/p/3174653.html

你可能感兴趣的文章
Java Web 常用在线api汇总(不定时更新)
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
[Python设计模式] 第25章 联合国维护世界和平——中介者模式
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
基于Lua插件化的Pcap流量监听代理
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>