当前位置 : 主页 > 网络编程 > 其它编程 >

C#Const、readonly、Static区别

来源:互联网 收集:自由互联 发布时间:2023-07-02
对于三者的关系来彻底分解一下。1.const静态常量也称编译时常量编译时--意味着用const定义的字段在编译时就 对于三者的关系,来彻底分解一下。 1. const         静态常量,也称编
对于三者的关系来彻底分解一下。1.const静态常量也称编译时常量编译时--意味着用const定义的字段在编译时就

对于三者的关系,来彻底分解一下。

1. const

        静态常量,也称编译时常量,编译时--意味着用const定义的字段,在编译时就要确定值(也可以理解为声明时),之后无法更改。属于类型级,意思是用类名直接访问,被所有对象共享!

特征:

        a.编译时常量,编译时/声明时确定值,之后不能修改。

        b.性能比readonly稍好,灵活性差一些。

        c.静态常量,隐式被Static修饰,不能再用static重复修饰。

        d.静态常量的数据类型(内建的int和浮点型)、枚举或字符串。

        e.属于类型级,意思是用类名直接访问,被所有对象共享!

例如:

public const float test1 = 3.14f; //正确,并且以后不能修改public const int test2 = 2 + 5; //正确,并且以后不能修改public const string test3 = "APP"; //正确,并且以后不能修改public const string test4 = GetData(); //异常,不能动态赋值、不能从配置文件赋值public static const string test5 = "APP"; //异常,不能再次被Static修饰,const已经隐式静态public static void Main(){test2 = 5; //异常,不能被二次修改}

2. readonly

        动态常量,也称运行时常量,运行时--意味着用readonly定义的字段,可以在运行时赋值(声明时或者构造函数内),之后无法更改。属于对象级,意思是用对象实例访问,这里就和const形成对比了。

特征:

        a.动态常量的值是在运行时获得的,指的是,可以在声明时或者构造函数内赋值,(如果在构造函数内指定初始值,则必须是静态无参构造函数)。

        b.性能比const稍差,灵活性好一些。

        c.readonly可以被static修饰,组成 static readonly和const相似了。

        d.动态常量可以是任意的数据类型。

        e.属于对象级,意思是用实例对象访问。

例如:

public readonly float test1 = 3.14f;//正确,并且以后不能修改public readonly int test2 = 2 + 5;//正确,并且以后不能修改public readonly string test3 = "APP";//正确,并且以后不能修改public readonly string test4 = GetData();//正确,动态赋值、可从配置文件赋值public static readonly string test5 = "APP";//正确,可以被Static修饰,static AppConst(){test5 = "cpp";//正确,可以在静态构造函数赋值}public static string GetData(){return "cpp";}public static void Main(){test5 = "cpp";//异常,只能在静态构造函数或声明时 赋值}

3.static

        其实static与const和readonly不是一类人,但是static经常和它们搅在一起,所有拿来区分一下。

        static 静态的,不变的,不会因实例化对象的不同而不同,所以与对象无关,静态成员只被创建一次,所以静态成员只有一份,无论对一个类创建多少个实例,它的静态成员都只有一个副本。static 可以修饰类、字段、属性、方法等。static修饰后,可以直接通过类名调用,不用再对类进行实例化。另外静态字段只能被静态方法调用,静态方法只能被静态方法调用。

【感谢龙石为本站提供数据共享平台 http://www.longshidata.com/pages/exchange.html】
网友评论