const
和
static readonly
的区别
这个问题虽然很简单,但有时候也能困扰我们一些新来的同学,
const
和
static readonly
的确很像,都在程序中只读,都是
一旦初始化则都不再可以改写
都是属于语言的静态等等。并且在多数情况下可以混用。
区别
const
1.
在
编译
期间解析的常量
2.
必须在
声明就初始化
3.
既
可用来修饰类中的成员,也可修饰函数体内的局部变量
。
static readonly
1.
在
运行
期间解析的常量,
2.
既可以在声明时初始化也可以在构造器中初始化
。
3.
只可以用于修饰类中的成员
例子:
1.
static readonly
MyClass myclass =
new
MyClass();
//
必须使用
static readonly,
因为
new
需要在运行时确定
//
而
const
只能必须在编译时就确定
2. static readonly A = B * 20;
static readonly B = 10;
//
可以使用
static readonly,
显然可以在运行时确定语句
//
也可以使用
const
//
const A = B * 20;
// const B = 10;
// const B = 10;
//
,编译器会在编译时候,就把
B
编译为
10
,
A
编译为
200
,而不是在运行时再计算
B * 20
2.
有一个项目,有一个
MyInt
的属性,定义如下:
public
class
MYClass
{
public
const
int
MyInt
= 5;
}
另一个项目中引用该属性
public
class
AnotherClass
{
int
I
=
MYClass.
MyInt
;
}
编译运行程序
,
I
= 5.
这是当然的。
但是如果我们改变
MYClass
中的
MyInt
的值,改为
6.
然后编译
MYClass
所在的项目,生成
dll
。
再运行程序
AnotherClass
,发现
I
还是
= 5
,而不是
6
!,为什么?因为在
AnotherClass
中,
I
已经被定义为
5
而不是运行时再去取
dll
的值,所以说
const
是编译时就确定了!!!