首页 > 编程语言 >C#中readonly与const区别

C#中readonly与const区别

时间:2022-12-19 17:37:29浏览次数:51  
标签:p2 p1 const C# 初始值 readonly 构造函数


       1.const、readonly和static readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写;
        2.const定义时必 须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值,

          并以构造函数内指定的值为准;

        3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问;   
        4.static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;
        5.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足



readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。
   readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null 。
   readonly 可以是任何类型


const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译 时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1; b

  readonly 允许把一个字段设置成 常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly




readonly 关键字与 ​​const​​ 关键字不同。 const readonly 因此,根据所使用的构造函数,readonly 另外,const 字段为编译时常数,而 readonly




public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;


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
*/






标签:p2,p1,const,C#,初始值,readonly,构造函数
From: https://blog.51cto.com/u_15917617/5953245

相关文章

  • C# dataGridView常用功能
     1.鼠标选中一行删除此行: foreach(DataGridViewRowrindGView_countList.SelectedRows)       {        if(!r.IsNewRow)   ......
  • linux C的一些笔记
    1.主函数的入参 主函数类似定义intmain();intmain(intargs);intmain(intargs,char*av[]);可以无惨,可以接受参数输入,入参一般为命令行执行参数,比如  传......
  • C#-sealed 封装类的使用
    示例1:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacesingleton{publicclassmyClass1{///<summary>//......
  • MATLAB随机波动率SV、GARCH用MCMC马尔可夫链蒙特卡罗方法分析汇率时间序列|附代码数据
    全文下载链接:http://tecdat.cn/?p=27340 最近我们被客户要求撰写关于分析汇率的研究报告,包括一些图形和统计输出。波动率是一个重要的概念,在金融和交易中有许多应用。它......
  • C#之lock关键字 lock锁定语句
    lock下面的示例包含一个lockclassAccount{decimalbalance;privateObjectthisLock=newObject();publicvoidWithdraw(decimalamount)......
  • VS2010创建基于C/S的三层架构模型
    在VS2010环境下创建基于C/S架构的三层模型:基础知识准备:    三层:UI、BLL、DAL另加数据模型Model    Winform作为UI界面。1、创建空的解决方案      新......
  • opencv对于bmp图像像素值的读取和赋值
    #include<stdio.h>#include<cv.h>#include<highgui.h> voidmain(){   IplImage*img=cvLoadImage("c://fruitfs.bmp",1);   CvScalars;///获取像素值  ......
  • CV520国产替代Ci521 13.56MHz 非接触式读写器芯片-更低成本替代
    CI521是一个高度集成的,工作在13.56MHz的非接触式读写器芯片,阅读器支持ISO/IEC14443A/B/MIFARE。CI521无需外围其他电路,Ci521的内部发送器可驱动读写器天线与ISO/I......
  • Cesium自定义材质
    材质资料ApperanceCesium的材质封装在Cesium.MaterialAppearance/Cesium.Material类中。一般,Cesium的Primitive由GeometryInstance和Appearance组成,Geometry......
  • C#随机生成字符串
    C#随机生成字符串字符串长度由num决定privatestringGenerateCheckCode(intnum){intnumber;charcode;stringcheckC......