zoukankan      html  css  js  c++  java
  • 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)

    两者的区别:

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

  • 相关阅读:
    Windows7与Window2008 64位IIS7上面DCOM配置Excel、Word
    C#连接SQLite的...方法
    VS2010版快捷键
    ajax 安装包下载
    Type InvokeMember()用法简介
    Lambda表达式
    多源最短路径算法
    单源点有权图的最短路径算法
    单源无权图的最短路径算法
    Tree Traversals Again
  • 原文地址:https://www.cnblogs.com/yang_sy/p/3556275.html
Copyright © 2011-2022 走看看