首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

static、constreadonly与static readonly的区别与联系

修饰符 初始化时机:运行时,是两个关键字的组合 值状态:允许修改,声明时赋值或者静态构造函数中赋值 修饰范围:字段 主要应用场景:第一,const相比,它主要应用于引用性变量;而const,只能用于string...类型的引用性变量;第二,类的只读公共属性 总结: const是静态的、编译期变量,只能在声明变量的时候赋值。...readonly是运行时变量,可以在声明的时候或在构造函数内赋值。 static readonly变量就变成了静态的、编译期变量。 只能静态构造函数中进行初始化。...同时static readonly可以理解为是最简单的一种单例模式实现方式。 const是静态常量,readonly是动态常量.const高效,readonly灵活!...但实际开发中我们经常用static readonly 来代替const, 以平衡const在灵活性上的不足.

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

C# const readonly 有什么区别

在写常量的时候,是选择使用 const 还是 static readonly 是一个让人难以决定的问题,本文告诉大家这两个方法的区别。...string str = "xxxxx"; static readonly string str = "xxxxx"; const 编译时常量 static readonly 运行时常量...对于隐式转换,如果是 const 支持隐式转换,如果是static readonly,不支持 (1)const常量在编译时解析;而static readonly常量在运行时解析。...(2)const常量必须在定义时初始化;而static readonly常量可以在定义时初始化,也可以在构造函数中初始化; (3)非常确定不会改变的常量值可以用const,必须写在函数体内的常量需要用const...(4)常量需要被客户端引用,且可能会改变,应该用static readonly

24920

C# const readonly 有什么区别

在写常量的时候,是选择使用 const 还是 static readonly 是一个让人难以决定的问题,本文告诉大家这两个方法的区别。...string str = "xxxxx"; static readonly string str = "xxxxx"; const 编译时常量 static readonly 运行时常量...对于隐式转换,如果是 const 支持隐式转换,如果是static readonly,不支持 ? (1)const常量在编译时解析;而static readonly常量在运行时解析。...(2)const常量必须在定义时初始化;而static readonly常量可以在定义时初始化,也可以在构造函数中初始化; (3)非常确定不会改变的常量值可以用const,必须写在函数体内的常量需要用const...(4)常量需要被客户端引用,且可能会改变,应该用static readonly。 ----

1.1K20

学习笔记-constreadonly的异同

(1)const定义时即初始化,运行期间无法再初始化;readonly除了在定义时可以初始化外,还能再运行期间的构造函数中初始化,实例只读变量只能在实例构造函数中初始化,静态只读变量只能在静态构造函数中初始化...; (2)const定义的变量只能通过类名称访问,而readonly会根据其是否定义为静态类型而分别通过对象与类名称访问; (3)const只能定义值类型与字符串,若定义引用类型则初始化值必须为null...,而readonly无此限制,可以定义引用类型时初始化为null,在对应的构造函数中再重新初始化 。...readonly可以static连用,const不可以。...(4)常量是编译器已经分配好内存储存好了的,直接去读取就行,而只读变量变量一样要新分配内存区域,只是只读变量不可更改.因此使用常量只读变量时,它们的寻址方式不一样。

27020

C#基本知识点-ReadonlyConst的区别

目录 什么是静态常量(Const动态常量(Readonly) 静态常量(Const动态常量(Readonly)之间的区别 动态常量(Readonly)被赋值后不可以改变 总结 什么是静态常量(Const...)动态常量(Readonly)   先解释下什么是静态常量(Const)以及什么是动态常量(Readonly)。   ...静态常量(Const动态常量(Readonly)之间的区别 静态常量(Compile-time Constant) 动态常量(Runtime Constant) 定义 声明的同时要设置常量值。...Const修饰的常量在编译期间就被解析,即:经过编译器编译后,我们都在代码中引用Const变量的地方会用Const变量所对应的实际值来代替; Readonly修饰的常量则延迟到运行的时候。   ...Readonly的最大区别(除语法外)   Const的变量是嵌入在IL代码中,编译时就加载好,不依赖外部dll(这也是为什么不能在构造方法中赋值)。

1.2K10

C#基础知识系列八(constreadonly关键字)

前言   不知道大家对constreadonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下。...现在再来说明constreadonly吧。 readonlyconst   const修饰的常量是上述中的第一种,即静态常量;而readonly则是第二种,即动态常量。...,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候    3、const修饰的常量注重的是效率;readonly修饰的常量注重灵活    4、const修饰的常量没有内存消耗;readonly...因为需要保存常量,所以有内存消耗    5、const只能修饰基元类型、枚举类、或者字符串类型;readonly却没有这个限制 第一个例子: 如果在const前面加了一个static的话,那显然是错误的...总结    对于constreadonly这两个关键字目前来说,也算是有所了解了,还是学了不少东西,如果看完本文还有疑问的话,你可以通过微软提供的ILDASM工具。

47020

Angular Component 里使用 const readonly 修饰的属性有什么区别

在 Angular 组件中,我们可以使用 const readonly 关键字来修饰成员属性。这两个关键字的目的都是为了确保数据的不变性,但它们在实现用法上有很大的区别。...首先,让我们了解一下 const readonly 的基本定义用法。 const const 关键字用于定义一个常量,它的值在声明时必须赋值,并且在后续代码中无法修改。...因此,在组件类中,我们需要在类外部声明 const 变量。 readonly readonly 关键字用于修饰类的成员属性,表示该属性的值在实例化后不可修改。...在 Angular 组件中,我们通常使用 readonly 关键字修饰那些在组件实例化后不会改变的成员属性。这有助于确保组件的状态不可变,从而提高代码的可读性可维护性。...适用范围 const 关键字适用于全局变量、局部变量函数参数,但不能用于修饰类的成员属性。这意味着,在 Angular 组件中,我们需要在类外部声明 const 变量。

19820

readonly disable的区别

readonlydisabled它们都能够做到使用户不能够更改表单域中的内容。...但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / password)textarea有效,而disabled对于所有的表单元素都有效,但是表单元素在使用了...disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)。...如果说在这种情况下用readonly来代替disabled的话,若表单中只有input(text / password)textarea元素,那还是可以的,如果存在其他发元素,比如select,用户可以在重新改写值后按回车键进行提交...disabledreadonly这两个属性有一些共同之处,比如都设为true,则form属性将不能被编辑,往往在写js代码的时候容易混合使用这两个属性,其实他们之间是有一定区别的: 如果一个输入项的

1.4K40

C++中constconst对象分别调用constconst成员函数

一、先来提出问题 const对象可以调用非const成员函数吗? 非const对象可以调用const成员函数吗? const成员函数内可以调用其它的非const成员函数吗?...非const成员函数内可以调用其他的const成员函数吗?...二、实践出真知 1、const对象可以调用const成员函数 2、const对象不能调用非const成员函数 3、非const对象可以调用const成员函数 4、非const对象可以调用非const成员函数...5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,...* this; 是void print() const;中this指针的类型是一样的,所以常量对象可以调用const成员函数。

1.1K20

【C++】const对象const成员

const对象 定义类对象时可以将其指定为const对象。定义后const对象不能再被修改。 const对象不能调用非const类型的成员函数。...有两种方法来定义一个const对象: const 类名 对象名 类名 const 对象名 这两种方法是等价的。...如果一个对象被定义成const对象,那么它就不能调用这个类中的非const成员函数。 const对象调用的成员函数一定都得是const!...//const const CTime time4(10); CTime const time5; 如果你用const对象引用了这个类中的非const成员函数,就会报错: 错误 1 error C2662...3.const成员函数 const成员函数只能被const对象引用。const成员函数内可以引用const数据成员,也可以引用非const数据成员,但不能修改非const数据成员的值。

1.1K10

this指针const

this指针const 目录 ? this指针 this 是 C++ 中的一个关键字,也是一个 const 指针,不可以修改指向。this指针指向当前对象,通过它可以访问当前对象的所有成员。...因此,编译时在成员函数中添加一个隐藏参数,将当前调用对象首地址传入,用来关联成员函数成员变量,这就是this指针 C++关键字,const指针,在类的成员函数,构造函数析构函数中,对所有成员的访问,...,且必须初始化 const int index = 10; 初始化赋值 /****初始化****/ int temp = 10; //定义变量的同时初始化 /****赋值****/ int temp...{ cout << "const:fun" << endl; } this可读写代表可以访问修改this里面的成员变量的值 this可读代表可以访问this里面的成员变量的值 非常成员函数可以调用常成员函数...修饰对象 被const修饰的对象 意味着对象中的成员数据不可以改内容 常对象不能调用非常成员函数,只能调用常函数 非常对象(普通对象)可以调用常成员函数如果有重载版本的非常函数,优先非常 原理const

1.4K30

let const 命令

# let const 命令 # let 命令 # 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效(块级作用域)。...ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。...ES6 规定暂时性死区let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。...ES6 除了添加letconst命令,后面章节还会提到,另外两种声明变量的方法:import命令class命令。所以,ES6 一共有 6 种声明变量的方法。...ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性

93020

letvarconst

arr[1](); 依次在他们各自的块级作用域中找变量i,分别为01 由此可以得出结论 var let 第一点不同就是 let 是块作用域,即其在整个大括号 {} 之内可见。...如果使用 let 来重写上面的 for 循环的话,会报错 var:只有全局作用域函数作用域概念,没有块级作用域的概念。但是会把{}内也假称为块作用域。...let:只有块级作用域的概念 ,由 { } 包括起来,if语句for语句里面的{ }也属于块级作用域。...另外const特点 const声明的变量也具有块级作用域且必须赋值且不可更改他的值(这里指数据内存地址) 复杂数组可以通过数组下标的方式arr[i]更改,但不可以重新声明赋值,这样会改变内存地址 let...const都不存在变量提升

56941

let const 命令

输出undefined var foo = 3; // let 的情况 console.log(bar); // 报错referenceError let bar = 3; 暂时性死区: letconst...命令 const声明一个只读的常量。...; const age = 30; 本质 const本质是指向的内存地址 指向的那个内存地址所保存的数据不得改动 复合类型的数据 指向的数据结构是不是可变的,就完全不能控制了 const foo =...命令 var命令function命令 letconst命令 顶层对象的属性 在浏览器环境指的是window对象 在 Node 指的是global对象 window.a = 1; a // 1...var命令function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性 var a = 1; // 如果在

70720
领券