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

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

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

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

    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

    28620

    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)常量是编译器已经分配好内存储存好了的,直接去读取就行,而只读变量变量一样要新分配内存区域,只是只读变量不可更改.因此使用常量只读变量时,它们的寻址方式不一样。

    28720

    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.4K10

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

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

    50620

    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.3K20

    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.5K30

    【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

    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命令声明的全局变量,不属于顶层对象的属性

    96020

    letvarconst

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

    59141

    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; // 如果在

    73920

    c# readonly

    使用 下面是使用 readonly 特性的基本语法: public readonly int MyField; 您也可以在构造函数中初始化只读字段,如下所示: public class MyClass...readonly修饰的字段内存分配在哪里 在C#中,readonly关键字修饰的字段的内存分配位置取决于它是否被声明为静态(static)。...如果readonly字段是实例字段(非静态),那么它的内存将会在堆上分配,作为创建对象实例时分配的一部分。每个对象实例都有自己的readonly实例字段副本。...无论是静态还是非静态的 readonly 字段,都只能在声明时或在相应的构造函数中初始化。对于静态 readonly 字段,这通常发生在静态构造函数或者第一次引用类之前。...readonly修饰的对象传递的是引用还是实例 无论字段是否被 readonly 修饰,对象的传递方式(引用或值)都取决于其类型。

    23550
    领券