今天边肖就和大家分享一下C#中const和readonly的用法对比。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友一起看看吧。
const常量
创建const常量有两个好处。第一个优点是const常量比数字更容易阅读和修改,因为使用了有意义的名称。第二个优点是,因为编辑器确保它的值在程序运行期间保持不变,const constant比variable更健壮。
声明const常量的语法如下:
访问修饰符常量关键字数据类型常量名称=初始化;
public const double PI=3.1415926
Const常量只能在声明时初始化,不能在其他地方赋值。它的值在操作期间保持不变。特别需要注意的是,一个类的const constant成员是隐式静态的,它们都在类外使用了类名来引用变量PI。奇怪的是,虽然const在默认情况下是静态的,但它不能由static关键字显式声明。
(其实const的静态是在代码层面,因为编译器在生成IL的时候会直接用对应的值替换对const常量的引用,这样会割裂const常量与其类型的从属关系。从这个角度来说,不能用static关键字声明是合理的。)
readonly常量
Const常量是隐式静态的,由同一类的所有对象共享。所有对象都有相同的值。如果O1和O2是Clircle类的两个对象,它们的const常量PI大小相同,都是3.1415926。
有时我们需要这样一个变量。它在类中的具体对象是一个固定的常数,但是它在不同的对象中可以有不同的值。这个常数可以通过readonly常数实现。
Const:该值必须在声明时初始化;Readonly:该值可能未初始化,可能会延迟到构造函数。
缺点:编译时会被解析,常量的值会被初始化的值替换;Readonly:延迟到运行时。
Const:注重效率;只读:注重灵活性。
Const:不消耗内存;Readonly:有内存消耗,因为需要保存常量。
比如一个酒店的房间数是固定的,但是不同的酒店可能有不同的房间,所以我们需要用readonly修改的这样一个常数。
命名空间ReadonlyDemo
{
///摘要
///创建一个酒店类
////摘要
一流酒店
{
public readonly int roomNum//表示房间总数
public int guestNun//表示已被占用的房间数量
public hotel(int roomumvalue){//构造函数
roomNum=roomNumValue
}
公共布尔值为空()
{
if(guestNun=roomNum)
{
返回true
}
其他
{
返回false
}
}
//一名乘客将办理登机手续。
public void LodgeIn()
{
if (isFull())
{
控制台。WriteLine('房间满了');
}
其他
{
guestNun
控制台。WriteLine(“成功签入”);
}
}
}
班级计划
{
静态void Main(string[] args)
{
控制台。writeline(“-”);
Hotel hot1=新酒店(6);//hot1酒店有6个房间。
for(int I=0;I 7;我)
{
hot1。LodgeIn();//入住客人
}
console . writeline(' hot 1酒店房间总数:{0} ',hot 1 . room um);
控制台。WriteLine('HOT1酒店已入住:{0}人',hot 1 . guest nun);
控制台。writeline(“-”);
酒店tel1=新酒店(5);//Tel1酒店有10个房间。
for(int I=0;i3;我)
{
tel1。LodgeIn();//入住客人
}
控制台。writeline(' TEL1酒店房间总数:{0} ',TEL1 . room num);
控制台。WriteLine('Tel1酒店已入住:{0}人',Tel1 . guest nun);
控制台。ReadLine();
}
}
}
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。