C# const和readonly修饰符的区别

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

readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。

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

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

总结const 字段只能在该字段的声明中初始化 readonly 字段可以在声明或构造函数中初始化因此,根据所使用的构造函数,readonly 字段可能具有不同的值。 
时间: 2024-12-16 16:50:55

C# const和readonly修饰符的区别的相关文章

const 和 readonly 修饰符的用法

1. 只有C#内置类型(int,double,long等)可以声明为const;结果.类和数组不能声明为const. 2. readonly 是在字段上使用的修饰符,直接以类名.字段访问. 3. const 必须在申明中初始化.之后不能再修改. 4. readonly可以在申明中初始化,也可以在构造函数中初始化,其它情况不能修改. namespace const_and_readonly { class Program { static void Main(string[] args) { Co

C# 总结const、 readonly、 static三者区别:

总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些: c.静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰, d.在声明时初始化: e

C#中override和new修饰符的区别

(new)“隐藏”,(override)“覆盖”(重写).不过要弄清楚这两个有什么区别确实也很难,因为子类在使用父类方法时根本看不出区别,子类不管父类是new了还是override了,用的都是父类方法.区别就在于,一个子类对象中,用父类类型指针去访问子类成员时有区别. 如果是new的,那么父类的这个函数地址仍然保留着,同时又提供了一个新的子类的该函数入口地址.也就是说子类对象中同时保存了两个入口地址,父类的该函数地址被“隐藏”,但是它还可以用父类的类型指针访问得到:用子类类型指针访问该函数,则进

Nullable<T>、Nullable、null、?修饰符的区别

这章我们讨论一下Nullable<T>.Nullable.null.?修饰符的区别 原创文章 Nullable<T>的前世今生 讨论它们之前,我们有必要讨论一下Nullable<T>的前世今生,目的也是为了让我们更好地了解他们的区别,加深印象. 在C#2以前,有一个问题经常会困扰我们,相信大部分人都想过此问题. 在数据库中,比如设置一个表如下(电脑表Computer) 字段名 类型 是否允许空值 Color varchar Y Age int N CpuSpeed in

Const和readonly这间的区别和相同处

相同:  const和readonly都是用来修饰常量的 不同: const 在申明之前就要对它初始化,readonly修饰的常量则可以到构造函数中初始化 const注重的是效率但是readonly注重的是灵活性 const在内存中不会占用内存但是readonly要保存常量的话就要消耗内存的 const只能修饰基元例如:string ,int bool 但是readonly却没有这个限制的 2:as,is转型比强制转型的优势 优势在于as,is 不抛出异常,如果转型失败,则返回null 强制转型

iOS 属性修饰符的区别

前言iOS5 之前 所有的 开发都需要开发者自己控制自己的对象的引用和释放.使用的修饰符是 assign.copy.retain iOS5 之后,Apple 推出了ARC(自动引用计数)机制,推出了新的修饰符替代之前的修饰符 strong.weak 简单说明1:ARC环境下,strong代替retain.weak代替assign2:weak的作用:在ARC环境下,,所有指向这个对象的weak指针都将被置为nil.这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_AC

java-访问修饰符的区别

说明:所谓访问权限,是指对象是否可以通过"."运算符操作自己的变量或通过"."运算符使用类中的方法. 1.Java中的四种访问修饰符:public.protected.default(无修饰符,默认).private. 2.四种修饰符可修饰的成分(类.方法.成员变量) public protected default private 类 √ × √ ×(内部类可以用private修饰) 方法 √ √ √ √ 成员变量 √ √ √ √ 3.四种修饰符的访问权限 pub

Java学习——public,private,protected等修饰符的区别

public.private.protecte.default是Java里用来定义成员的访问权限的,也就是在成员前不加任何权限修饰符.如: public   class   A{     void   method(){}; } method就属于default权限. 这四个修饰符的访问权限如下表: -----------------------------------------------                         类内部     package内       子类  

private/默认/protected/public权限修饰符的区别

private/默认/protected/public权限修饰符和面向对象的三大特性的封装性有着密切关系.它们都可以修饰类的成员,其中的默认和public还可以修饰类. 类的成员包括:成员变量.成员方法.构造方法.内部类.代码块. 其中: public:修饰类可以被同一项目所有包中的所有类访问(类可见性). 默认:可被同一包中的类访问(包可见性). 小结: 1.内部类属于类的成员,可以使用以上四个修饰符修饰,这一点和类不同. 2.如何使用:类的属性一般使用private修饰,可以通过public