标签:
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字段可以在属性外部进行访问,但是除了这个特例之外,不要从除了包容属性之外的任何地方访问属性的支持字段。
标签:
原文地址:http://www.cnblogs.com/crz2014/p/4331134.html