const和readonly的比较,是困扰我很久的一个问题,正好有空就专门抽空看了看(真的打算细看的时候才发现这么简单),也正好试用下Markdown的语法,谁成想写着写着就成了MSDN的翻译文章(甚至都不算是翻译,只是整理),自罚一杯…
来自MSDN的比较
1. 都是C#中的关键字(访问修饰符);
2. 被const修饰的字段,必须在初始化的时候赋值;(编译时变现出的常量状态)
3. 被readonly修饰的字段,即可以在初始化的时候赋值,也可以在声明字段的类的构造函数中赋值;(运行时表现出的常量状态)
来自MSDN的示例
1.const示例
public class ConstTest
{
class SampleClass
{
public int x;
public int y;
public const int c1 = 5;
public const int c2 = c1 + 5;
public SampleClass(int p1, int p2)
{
x = p1;
y = p2;
}
}
static void Main()
{
SampleClass mC = new SampleClass(11, 22);
Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
Console.WriteLine("c1 = {0}, c2 = {1}",
SampleClass.c1, SampleClass.c2 );
}
}
/* Output
x = 11, y = 22
c1 = 5, c2 = 10
*/
2.readonly示例
public class ReadOnlyTest
{
class SampleClass
{
public int x;
// Initialize a readonly field
public readonly int y = 25;
public readonly int z;
public SampleClass()
{
// Initialize a readonly instance field
z = 24;
}
public SampleClass(int p1, int p2, int p3)
{
x = p1;
y = p2;
z = p3;
}
}
static void Main()
{
SampleClass p1 = new SampleClass(11, 21, 32); // OK
Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
SampleClass p2 = new SampleClass();
p2.x = 55; // OK
Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
}
}
/*
Output:
p1: x=11, y=21, z=32
p2: x=55, y=25, z=24
*/