• c#如何区分静态只读变量和常量


    常量const

    常量就是一个其值永远不会改变的静态字段。常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值。常量可以是C#内建的任何数字类型或枚举类型。声明一个常量的时候必须对其进行初始化。

    例如:

    class Program
    {
        const int a = 2;        
        
        static void Main(string[] args)
        {           
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }
    Const Sample

    那么编译之后的IL的代码有两行值得注意:

    1. const int a=2; 编译为.field private static literal int32 a = int32(0x00000002)

    2. 在Console.WriteLine之前,常量的值被编译器推算出来:
    IL_0001:  ldc.i4.2; 
    IL_0002:  call       void [mscorlib]System.Console::WriteLine(int32)

    静态只读static readonly

    静态只读常量只是在某一个应用程序中初始化之后,不能对其进行修改。但是在不同的应用程序中可以有不同的值。

    同样,对于上面的例子,如果我们把变量a更改为静态只读,那么IL代码有哪些变化呢?

    1. static readonly int a=2;编译为.field private static initonly int32 a

    2.在Console.WriteLine之前,不会推算其值:
    IL_0001:  ldsfld     int32 Learning.LinqDemo.ConsoleApp.Program::a
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(int32)

    两者的区别:

    简单的一句话就可以:常量在所有的程序中都是同一个值,而静态只读变量在不同的程序中可以有不同的值。

  • 相关阅读:
    Linux Virtual Server技术
    log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)
    Android控件ToggleButton的使用方法
    Redis学习手冊(事务)
    游戏server之server优化思路
    Codeforces 474D Flowers (线性dp 找规律)
    【C语言】编写函数实现库函数atof
    unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
    [WebGL入门]二十一,从平行光源发出的光
    TwoSum leetcode
  • 原文地址:https://www.cnblogs.com/yang_sy/p/3556275.html
Copyright © 2020-2023  润新知