常量就是其值固定不变的量,值类型或引用类型都可以作为常量。在C#中,常量可以分为静态常量和动态常量。
一、静态常量
声明静态常量的语法格式如下:
修饰符 const 数据类型 常量名 = 常量值;?修饰符:可以是public、protected、internal、private等。
?const:声明静态常量的关键字。
?数据类型:可以是整型(int)、浮点型(double)、枚举或字符串。
如:
public const int a = 1000;
静态常量在编译时会将其替换为所对应的值。用const定义的常量,对于所有类的对象而言都是一样的,因此需要像访问静态成员那样去访问const定义的常量。
也可以使用一条语句同时声明多个常量,比如:
class classTest
{
public const double X = 1.0;
public const double Y = 2.0;
public const double Z = 3.0;
}
可以写成:
class classTest2
{
public const double X = 1.0, Y = 2.0, Z = 3.0;
}
在classTest2中声明的多个常量都写在一条语句中。
二、动态常量
声明动态常量的例子如下:
public static readonly classTest classTest1 = new classTest();
声明好动态常量以后,系统会为readonly所定义的动态常量分配内存空间,就像类的其它成员一样拥有独立的空间。
const和readonly的值一旦初始化则都不再可以改写;
const只能在声明时初始化;readonly既可以在声明时初始化也可以在构造器中初始化;
const隐含static,不可以再写static const;readonly则不默认static,如需要可以写static readonly;
const是编译期静态解析的常量(因此其表达式必须在编译时就可以求值);readonly则是运行期动态解析的常量;
const既可用来修饰类中的成员,也可修饰函数体内的局部变量;readonly只可以用于修饰类中的成员.
三、静态常量与动态常量的区别
?静态常量在声明时要设置常量值;动态常量在声明时可以设置常量值,也可以不设置常量值,也可以在类的构造函数中设置常量值。
?静态常量的类型必须是值类型(请阅读C#数据类型),其值不能通过new进行设置;动态常量没有类型的限制,可以定义任何类型的常量。
?静态常量对于类的所有对象来说,常量的值是相同的;动态常量对于类的所有对象来说,常量的值可以是不同的。
?静态常量不分配内存;动态常量要分配内存,以便保存常量实体。
?静态常量性能稍高,但是限制多,不灵活;动态常量性能稍低,但是灵活、方便。