const和readonly相同点
它们在外部使用时都不能更改。只能读取。
const和readonly不同点。
1.const是静态类型。readonly可以是静态也可是实例类型。并且C#中const默认为static不用显示声明。
2.const必须是基元类型(什么是基元类型,请查阅MSDN)。readonly可以是任意类型。
3.const必须在声明时赋值,否则编译器不通过。readonly可以在声明时不赋值,而在静态构造函数中赋值。除了静态构造函数中以外,其他地方都不能对它更改。
4.最关键的区别。const在编译后会把const对应的值直接嵌入到代码中。而readonly则编译后是该变量的地址,而不是具体的值。
使用常量的示例代码:
public test()
...{
const string a="a";
public void ClientCode()
...{
string b=a+"b";
}
}以上代码编译后大致(实际并不完全是)如下:
public test()
...{
//注意:常量声明被忽略掉了。编译器把所有用到a的部分,直接用它的值"a"进行替换。
//const string a="a";
public void ClientCode()
...{
string b="a"+"b";
}
}使用readonly的示例代码:
public test()
...{
readonly string b = "a";
public void ClientCodeReadonly()
...{
string c = b + "b";
Console.WriteLine(c);
}
}以上代码编译后大致如下:
public test()
...{
readonly string b = "a";//在堆栈上开辟内存区域,b指向为指向该区域的指针*b
public void ClientCodeReadonly()
...{
string c = String.Contact(*b,"b")//把地址传给字符串合并函数进行操作
Console.WriteLine(c);
}
}什么时候使用const或readonly
1.限制const类型的滥用。最好保证只在一种情况下使用const。就是这个值像圆周率一样,永远不会因为任何外界因素改变。如果一个值会被另外程序集的类调用,那么不能使用const。
const PI=3.1415926.
2.如果该字段没有readonly限制,那么默认它是可以被任意更改而程序不会出错的。像连接字符串,就应该加上readonly。readonly相当于一个只有get访问器的属性。什么时候该给一个字段加上readonly的限制,就问自己,如果它是个属性,需要给它提供set方法吗?
本文详细对比了C#中的const与readonly关键字,在类型、赋值方式、编译后的表现等方面的不同,并提供了示例代码帮助理解。同时,文中还讨论了如何合理选择使用这两种关键字。

821

被折叠的 条评论
为什么被折叠?



