C# const和readonly的区别分 深度分析

const是静态常量,const是编译时常量;readonly是动态常量,是运行时常量,const较高效,readonly较灵活。

1.访问方式

const默认是静态的,只能由类型来访问,不能与static同时使用;

readonly默认是非静态的,由实例对象来访问,可以显示使用static定义为静态成员;

2.修饰内容

const只能应用在值类型和string类型上,其他引用类型常量只能定义为null,数组和结构体不能被声明为const常量,string类型可以被声明为常量,因为string类型的字符串恒定特性,使得string的值具有只读特性;

readonly只读字段,可以使任意类型,但是Readonly赋值引用类型以后,引用本身不可以改变,但是引用所指向的实例的值是可以改变的;

3.初始化

const必须在字段声明时初始化;

readonly可以在声明时,或者构造函数中进行初始化,不同的构造函数可以为readonly常量实现不同的初始值;在构造方法中,我们可以多次对Readonly赋值;

static readonly的初始化,必须在定义时,或者静态无参构造函数中进行;

4.定义区别

const可以定义字段和局部变量;而readonly则只能定义字段;

    public class Test
    {
        //声明字段
        private const string name = "sssss";
        public readonly int age = 24;
        private static readonly string name1 = "ssssss";
        public Test(int a)
        {
            age = 25;//readonly多次赋值
            age = 26;
            //声明局部变量
            const string name = "132456";
        }
    }

5.语法外的最大区别

Const的变量是CLR特殊处理嵌入在IL代码中,编译时就加载好,不依赖外部dll(编译好可以都可以删除这个外部dll哈哈)。所以在程序集更新时Const容易产生版本不一致的情况。


Readonly的变量是在运行时加载,需请求加载dll,每次都获取最新的值,依赖外部dll,不会出现版本不一致问题,更灵活,但是效率相较于Const就低了一些。

你可能感兴趣的:(C#)