zoukankan      html  css  js  c++  java
  • const string vs static readonly string

    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}
    ClassA1.STATIC_READONLY_STRING = {1}",
                    ClassA1.CONST_STRING,
                    ClassA1.STATIC_READONLY_STRING);
            }
        }
    
        class Program {
            static void Main() {
                ClassB1.ShowClassA1();
            }
        }
    }

    编译并运行:
    C:UsersdeDesktopao>csc /t:library /nologo ClassA1.cs

    C:UsersdeDesktopao>csc /r:ClassA1.dll /nologo ClassB1.cs

    C:UsersdeDesktopao>ClassB1
    ClassA1.CONST_STRING = CONST_STRING
    ClassA1.STATIC_READONLY_STRING = STATIC_READONLY_STRING

    C:UsersdeDesktopao>

    重新编辑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:UsersdeDesktopao>csc /t:library /nologo ClassA1.cs


    C:UsersdeDesktopao>ClassB1
    ClassA1.CONST_STRING = CONST_STRING
    ClassA1.STATIC_READONLY_STRING = REBUILD_STATIC_READONLY_STRING


    C:UsersdeDesktopao>

    ????

    反编译打开ClassB1.exe

    C:UsersdeDesktopao>ildasm

    C:UsersdeDesktopao>

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

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

    User Strings
    -------------------------------------------------------
    70000001 : (64) L"ClassA1.CONST_STRING = {0} ClassA1.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} ClassA1.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字符串驻留机制

  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/BugQiang/p/3174653.html
Copyright © 2011-2022 走看看