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字符串驻留机制

  • 相关阅读:
    iOS开发的一些奇巧淫技2
    iOS开发的一些奇巧淫技
    指定控制器跳转
    去掉UITableView HeaderView或FooterView随tableView 移动的黏性
    TextView随键盘弹出上移高度
    The Swift Programming Language-官方教程精译Swift(9) 枚举-- --Enumerations
    登录记住账号和密码小Demo
    The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
    The Swift Programming Language-官方教程精译Swift(7)函数 -- Functions
    The Swift Programming Language-官方教程精译Swift(6)控制流--Control Flow
  • 原文地址:https://www.cnblogs.com/BugQiang/p/3174653.html
Copyright © 2011-2022 走看看