c#基础知识--常量(const),只读字段(readonly)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#基础知识--常量(const),只读字段(readonly)相关的知识,希望对你有一定的参考价值。

1.0:常量

常量被关键字const 所修饰 我们来看看常量的demo 

 class Program
    {
        static void Main(string[] args)
        {

            const string name = "soaeon";
            Console.WriteLine(name);
            Console.ReadKey();
        }
    }

下面我们看看该demo的反编译结果

技术分享

 哈哈  关于反编译的结果  我们可以看到 定义的  const string  name="soaeon";   不见了。 而在我们的 console.WriteLine("soaeon") 直接用比变量值给取代了   从这里 你发现了什么呢?

 static void Main(string[] args)
        {

            const string name = "soaeon";         
            Console.WriteLine(name);
            Console.ReadKey();


            /* 1. 常量: 被const修饰的数据叫做常量.
             *    常量的值1旦声明,就无法更改.
             * 
             * 2. 为什么常量的无法改变?
             *    经过反编译,我们发现声明常量的那句话不见了.
             *    在使用常量的地方 直接用常量的值 代替了.
             *    就算可以改也没有任何意义.
             *    
             * 3. 声明常量的时候
             *    a. 常量声明的同时必须要赋值.
             *    b. 常量的值要求在编译的时候就可以确定.
             *    
             *    在编译的时候,编译器无法知道变量的值. 只有在运行起来的时候才知道.
             * 
             * 4. 常量可以是局部的,也可以使成员的.
             *    当常量作为成员变量的时候, 通过类名直接点出来访问.而不是通过对象名,
             *    
             * 5. 什么时候我们可以定义常量
             *    如果有1个数据在整个程序的运行期间都不会发生变化. 
             *    那么这个时候我们可把这个数据定义为常量以提高程序的运行效率.
             */
        }

 

 

2.0readonly 只读字段

我们看看 radonly的相关demo 

class Person
    {
        public readonly string name = "jack";
        public int age;
        public bool gender;

        public Person(string name)
        {
            this.name = name;
        }
       
    }

    有木有发下  readonly 虽然意为 只读  但是我们惊奇的发现   被关键字readonly修饰的字段可以在构造函数中修改  没错   你没看见   这也是被readonly修饰的字段唯一可以重新赋值的地方

 

 

3.0 const 和readonly的区别

const的值 必须要在编译的时候就确定下来   从上面的反编译中可以看出 编译之后 在要使用的位置其实已经使用常量的值给代替了

readonly  是要运行的时候    在构造函数中确定  所以唯一能重新赋值的地方是在构造函数中

 

以上是关于c#基础知识--常量(const),只读字段(readonly)的主要内容,如果未能解决你的问题,请参考以下文章

[c#] const 与 readonly

C# 常忘知识

常量数据与只读字段

C#各种字段类型对比

C#关键字 const与readonly

C#中的staticreadonly与const的比较