•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

c#.net中const和readonly的区分【C#.Net教程】,.net,const,readonly

摘要: (1)readonly和const都是用来标示常量的。(2)初始化赋值差异。const润饰的常量必需在声明的同时赋值。比方:publicclassClass1{...
(1) readonly和const都是用来标示常量的。
(2) 初始化赋值差异。
const润饰的常量必需在声明的同时赋值。比方:

public class Class1  
{  
    public const int MaxValue = 10;       //准确声明  
    public const MInValue;                   //毛病:常量字段请求供应一个值  
    public Class1()  
    {  
        MinValue = 10;  
    }  
}

readonly字段可以在初始化(声明或组织函数)的过程当中赋值。因而,依据所运用的组织函数,readonly字段可以具有差异的值。

public class Class1  
{  
    public readonly int c = 10;           //准确声明  
    public readonly int z;  
    public Class1()  
    {  
        z = 24;//准确  
    }  
    protected void Load()  
    {  
        z = 24;//毛病:没法对只读的字段赋值(组织函数或变量初始值指定项中除外)  
    }  
}

readonly是实例成员,所以差异的实例可以有差异的常量值,这是readonly更天真。

public readonly Color Red = new Color(255, 0, 0);  
public readonly Color Green = new Color(0, 255, 0);  
public readonly Color Blue = new Color(0, 0, 255);

(3) const字段是编译时常数,而readonly字段可用于运行时常数。
const请求编译器可以在编译时盘算出肯定的值。在编译的时刻,用盘算出的这个肯定的值去替代挪用该常量的每个处所。因而不能从一个变量中提取值来初始化常量。
readonly许可把一个字段设置成常量,但可以实行一些运算,可以肯定它的初始值。因为readonly是在盘算时实行的,所以可以用某些变量初始化。在运行时才肯定的该值。
(4) const默许就是静态的,而readonly假如设置成静态的就必需显现声明。
(5) const润饰的值的范例也有限定,它只能为以下范例之一(或可以转换为以下范例):sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、enum范例或援用范例。注重可以声明为const的援用范例只能为string或值为null的其他援用范例。readonly可所以任何范例。
这就是说,当我们须要一个const的常量时,若他的范例限定了它不能再编译时被盘算出肯定的值来,那末我们可采用将之声明为static readonly的体式格局来处理。但两者之间照样有一点纤细的差异的。看下面两个差异的文件。
file1.cs

using System;  
namespace MyNamespace1  
{  
    public class MyClass1  
    {  
        public static readonly int myField = 10;  
    }  
}


file2.cs

namespace MyNamespace2  
{  
    public class MyClass1  
    {  
        public static void Main()  
        {  
            Console.WriteLine(MyNamespace1.MyClass1.myField);  
        }  
    }  
}

两个类分属于两个文件file1.cs和file2.cs,并离开编译。在文件file1.cs内的域myField声明为static readonly时,假如我们因为某种须要将myField的值改为了20,那末我们只须要从新编译文件file1.cs为file1.dll,在实行file2.exe时即会获得20。
但假如将static readonly转变成const后,再转变myField的初始化值时,我们则必需从新编译一切援用到file1.dll的文件,不然我们援用的MyNamespace1.MyClass1.myField将不会如我们所愿而转变。这在大的系统开发过程当中特别须要注重。
(6) object、Array(数组)和struct(构造)不能被声明为const常量。

以上就是c#.net中const和readonly的区分的内容,更多相关内容请关注ki4网(www.ki4.cn)!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号