C#只读字段和常量的区别 静态构造函数的例子

发布时间:2020-05-21编辑:脚本学堂
本文通过一个例子,帮助大家理解C#中只读字段与常量的区别,以及静态构造函数的使用。有需要的朋友,参考下吧。

代码如下:
 

复制代码 代码示例:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace ConsoleApplication1 

    /// <summary> 
    /// 作者:it小金 www.jb200.com
    /// 功能:c#只读字段和常量的区别,以及静态构造函数的使用 
    /// </summary> 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            Console.WriteLine(test.a); 
            Console.WriteLine(test.b); 
            Console.Read();            
        }     
    } 
    public class test 
    { 
        public static readonly int b;//只读字段可以使用static关键字,只读字段可以不进行初始化赋值,只读字段只能在构造函数或变量初始化时进行赋值 
        public const int a=1;//常量不可以使用static关键字,常量必须在定义的时候进行初始化进行赋值 
        
       static test()//静态构造函数,类实例化之前调用执行,且只执行一次 
        { 
            
            b = 2;//因为是只读字段,所以只能在构造函数中进行初始化,且改只读字段为static类型,所以需在静态构造函数中进行赋值 
        } 
        void aa() 
        { 
            //a = 1;错误 
            //b=1;错误 
        }         
    } 
}

有关C#中的只读字段

常量的概念是一个包含不能修改的值的变量,常量是C#与大多数编程语言共有的,但是常量不必满足所有的要求。有时需要一些变量,其值不应改变,但在运行之前是未知的,C#为这种情形提供了另一个类型的变量:readonly字段。

readonly关键字比const灵活得多,允许把一个字段设置为常量,但可以执行一些运算,以确定它的初始值。其规则是:可以在构造函数中给readonly字段赋值,但不能在其他地方赋值。readonly字段还可以是一个实例字段,而不是静态字段,类的每个实例可以有不同的值,与const字段不同,如果要把readonly字段设置为静态,就必须显式声明。

注意:
不需要把readonly字段定义为private,因为根据定义,它们不能在外部修改(此规则同样适用于常量)。
在构造函数中不必为readonly字段赋值,如果没有赋值,它的值就是其数据类型的默认值,或者在声明时给它初始化的值。
这适用于静态和实例readonly字段。