C#常量字段

const 常量字段使用方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project5_42
{
    class Program
    {
        static void Main(string[] args)
        {
            ConvertUnits cu = new ConvertUnits();
            //const修饰的字段在编译时自动编译为static类型字段,可以直接通过类名来访问,
            //但是在声明显示声明为为static则会导致编译失败
            Console.WriteLine(ConvertUnits.CupsPerGallon);

        }
    }
    class ConvertUnits
    {
        public const float CentimetersPerInch = 2.54F;
        public const int CupsPerGallon = 16;
        //const类型的字段声明时不能声明为static
        //public static const  float PI=3.141592654F;
    }
}

public常量应该恒定不变,因为一个程序集引用了另一个程序集中的常量,常量将直接编译到引用程序集中,当被引用的程序集中的常量发生变化之后如果没有

进行重新编译,引用程序集中的常量将还是原始值。”

对上面的一段话在VS2013中进行了验证,包括在同一个解决方案中创建一个dll项目和一个引用此dll的项目,以及在一个工程中创建dll项目而在另一个项目中引用,在只编译dll项目而不编译引用dll的项目的情况下,dll项目中对常量做出的更改仍能正确反映到引用项目中,而并没有出现作者提到的问题。但是为了避免万无一失,最好还是避免这样的使用方法,而是采用作者下面提到的使用readonly字段。

将来可能产生改变的值应该指定为readonly,不要定义为常量。

readonly修饰符只能用于字段,用来指出字段值只能从构造器中更改,或者直接在声明时制定。与const用法的区别就是const适合用在类似圆周率,阿伏伽德罗常数等不变的量,而readonly是在构造函数中进行初始化的,每个实例的readonly字段都可以不同,区别在于readonly字段可以在执行时进行赋值,而const只能在编译时进行赋值。readonly字段需要在构造函数中进行初始化,所以编译器要求readonly字段可以在属性外部进行访问,但是除了这个特例之外,不要从除了包容属性之外的任何地方访问属性的支持字段。

posted @ 2015-03-12 20:27  北风Z  阅读(1724)  评论(0编辑  收藏  举报