首页 > 其他分享 >1_readonly与const区别

1_readonly与const区别

时间:2024-03-03 23:15:16浏览次数:26  
标签:初始化 const 常量 区别 readonly 声明 public

readonly与const区别?

  1. readonly关键字(运行时常量):字段可以在声明或构造函数中初始化,常作为运行时常量使用。

  2. const关键字(编译时常量):字段只能在该字段的声明时初始化,常作为编译时常量使用过。

C# 中的 readonlyconst 都是用于声明常量的关键字,但它们之间存在一些关键的区别。

1. 初始化时机

  • const 必须在声明时初始化,且只能初始化为常量表达式。
  • readonly 可以延迟初始化,可以在声明时初始化,也可以在构造函数中初始化。

2. 作用域

  • const 默认是静态的,只能在类级别声明。
  • readonly 可以是静态的,也可以是实例的。

3. 存储方式

  • const 在编译时会被替换为实际值。
  • readonly 在运行时存储在内存中。

4. 修改

  • const 一旦声明后不能修改。
  • readonly 可以通过反射修改。

代码示例

// const 示例
public class ConstExample
{
    public const int PI = 3.1415926535;

    public void PrintPI()
    {
        Console.WriteLine(PI);
    }
}
// readonly 示例
public class ReadonlyExample
{
    public readonly int radius;

    public ReadonlyExample(int radius)
    {
        this.radius = radius;
    }

    public void PrintArea()
    {
        Console.WriteLine(Math.PI * radius * radius);
    }
}

总结

  • const 用于声明编译时常量,值在编译时确定,不能修改。
  • readonly 用于声明运行时常量,值可以在运行时确定,可以被反射修改。

选择使用哪个关键字取决于具体需求:

  • 如果需要声明一个编译时常量,使用 const
  • 如果需要声明一个运行时常量,并且需要在构造函数中初始化,使用 readonly
  • 如果需要声明一个可以被反射修改的常量,使用 readonly

标签:初始化,const,常量,区别,readonly,声明,public
From: https://www.cnblogs.com/cookie2030/p/18050953

相关文章

  • 11_C# 中字符串 string.Empty,"",null 三者的区别
    C#中字符串string.Empty、""和null三者的区别1.string.Emptystring.Empty是一个表示空字符串的静态字段。它实际上等同于""(空字符串),但使用string.Empty可以更加清晰地表示我们需要一个空字符串。2.""(空字符串)双引号中没有任何字符的字符串被称为空字符串。它......
  • 10_C# 中的 String 和 StringBuilder 的区别
    C#中的String和StringBuilder的区别1.String类String类表示不可变的字符串。一旦创建String对象,其内容就不能再被修改。对String对象进行任何修改操作都会返回一个新的String对象。示例:stringstr1="Hello";stringstr2=str1+"World!";Console.W......
  • 9_dynamic动态类型与object类型的区别
    C#中dynamic动态类型与object类型的区别1.object类型object类型是.NET中System.Object类的别名。在C#中,所有类型(预定义、用户定义、引用类型、值类型)都直接或间接继承自Object。因此,我们可以将任何类型的值用object对象来接收。2.dynamic动态类型动态......
  • 6_as和is的区别
    as和is的区别is只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。as运算符将表达式结果显式转换为给定的引用类型或可以为null值的类型。如果无法进行转换,则as运算符返回null。总结:as模式的效率要比is模式的高,因为借......
  • 基因序列中的一些名词区别
      1.基因分为编码区和非编码区,编码区包含外显子和内含子,一般非编码区具有基因表达的调控功能,如启动子在非编码区。编码区则转录为mRNA并最终由外显子部分翻译成多肽(蛋白质)。2. 内含子(intron)是真核生物细胞DNA中的间插序列。这些序列被转录在前体RNA中,经过剪接被去除,最终不存......
  • 定义与声明的区别
    在C++中,声明和定义有以下区别:声明(Declaration):声明是向编译器介绍变量、函数、类等的名称和类型。声明不分配存储空间,也不初始化变量。声明通常出现在函数原型、类定义或全局变量声明中。例如,声明一个整型变量inta;,这里只告诉编译器有一个名为a的整型变量,但并没有为它分配存储......
  • redis和memcached的区别
    观点一:1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value交换到磁......
  • RabbitMQ、RocketMQ、Kafka区别
    引言1、队列应用场景:MQ(MessageQueue,消息队列)消息队列在实际应用中常用的使用场景(优点):异步处理,应用解耦,流量削锋和消息通讯四个场景。2、目前使用较多的消息队列:有老牌的ActiveMQ、RabbitMQ,ZeroMQ,炙手可热的Kafka,MetaMQ,阿里巴巴的RocketMQ。3、如何选型(目前现状):......
  • 构建类问题 constructive problem 2007,
    2007.FindOriginalArrayFromDoubledArrayAnintegerarray original istransformedintoa doubled array changed byappending twicethevalue ofeveryelementin original,andthenrandomly shuffling theresultingarray.Givenanarray cha......
  • ulimit.conf中soft和hard区别及常用配置
    在Linux中,ulimit命令用于限制用户对shell资源的访问,包括进程数、文件打开数等。这些限制可以分为软限制(softlimit)和硬限制(hardlimit)。软限制(softlimit)是当前系统生效的设置值,可以理解为一种警告的设定。当资源使用超过这个限制时,系统并不会立即阻止,而是会发出警告信息,提示用户......