• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    c#.net中const和readonly的区别
    (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#中const和readonly的用法比较
    • 浅谈Java中的final关键字与C#中的const, readonly关键字
    • C#中const 和 readonly 修饰符的用法详解
    • 浅谈c#中const与readonly区别
    • C#中const用法详解
    • 深入探讨C#中的const、readonly关键字
    • C#基础知识系列八const和readonly关键字详细介绍
    • C++中const的实现细节介绍(C,C#同理)
    • C#基础:基于const与readonly的深入研究
    • C#中 const 和 readonly 的不同
    • C# 中const,readonly,static的使用小结
    上一篇:ASP.NET中DataTable与DataSet之间的转换示例
    下一篇:.net前台调用后台函数的简单实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    c#.net中const和readonly的区别 c#.net,中,const,和,readonly,