const,readonly 常量与只读
Const是常量
Const在编译时会被编译为静态成员,它确定于编译时期,属类型级,通过类型来访问。
现在通过以下几种情况来说明const常量:
(1)初始化
public const string _name;
这种方式是错误的,因为它的值须在编译时期确定,所以在声明要初始化。
(2)构造器中初始化
public const string _name= "宋江";
public ConstReadonly()
{
_name = "吴用";
}
会有异常。
·为const在字面上理解就是常量,而对于赋值来说,左边不能是常量
·构造器初始化是在运行时期,而常量是确定于编译时期
(3)局部应用
做为局部常量使用。在方法Hello中:
public string Hello()
{
const string _returnStr = "常量";
return _returnStr;
}
(4)用于引用类型
const只用于值类型和字串类型。如果是引用类型如:
public const object _object = new object();
会有异常:只能用null对引用类型进行初始化(字串除外)。
public const object _object = null;
因为new是运行时,而const是编译时。
Readonly
只读变量,也从以下几方面来说明:
(1)初始化
public readonly int _age;//=22;
public readonly int _age=22;
两种都可以。
如果在声明时不进行初始化,将赋值默认值。
(2)构造器
在构造器中修改。
public readonly int _age=22;
public ConstReadonly()
{
_age = 10;
}
测试:
ConstReadonly cc = new ConstReadonly();
Assert.AreEqual(10, cc._age);
而在构造器外和声明时初始化时,不能对只读变量赋值。
(3)局部应用
不能定义局部变量。
Static readonly
静态只读变量
(1)初始化
public static readonly string _password="123456";
在声明时可以初始化也可以不初始化。
(2)构造器
static ConstReadonly()
{
_password = "123";
}
可以在静态构造器中进行初始化或赋值。(静态构造器是不带访问修饰符,同时不能带参数。)
(3)局部应用
不可以做为局部变量使用。
在IL中:
·Const定义为:static literal
·readonly为private initonly
·static readonly 定义为static initonly
总结:
1》 const是静态的,由类型访问,不能与static同用;readonly不是静态的,由对象来访问,可以与static一起使用
2》 const须在声明时初始化,readonly可以在声明时初始化,也可以在构造器中初始化。如果是static readonly,可以在静态构造器中初始化。
3》 const可以定义字段和局部常量,readonly只能是字段
4》 const中用于值类型和字串,引用类型初始化为null
总之,常量是常量,变量不管是只读的,还是一般的还是静态的,它总归是变量。
const,readonly 常量与只读的更多相关文章
- const与readonly常量
const与readonly常量 const与readonly都是用来定义常量,但是它们有什么区别呢? 下面我们来简要的说明一下: const修饰的常量是编译时常量,如:public const St ...
- .net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等
1.类与对象的关系类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象 ...
- 为什么很多人使用#define而不是const定义常量
众所周知,C语言一开始只有#define,C程序员用#define定义符号常量.但后来ANSI C加入了const限定符,而const应该比#define更好,为什么现在的C程序员还在大量使用#def ...
- const readonly
静态常量(compile-time constants)静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值. 动态常量(runtime constants)而动态常量的值则 ...
- CSharp初级篇 1-4 this、索引器、静态、常量以及只读
.NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...
- [BS-00] const限定常量或者变量(初次赋值后),其值不允许被改变
CONST(C中的CONST) const是一个C语言(ANSI C)的关键字,它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的 ...
- JS 使用const声明常量的本质(很多人都有误解)
在我们使用const声明常量时,总认为值一旦声明就不可改变,其实是有误解的: 刚在看ES6标准文档时,仔细阅读了const的解析,恍然大悟的感觉,分享给大家. 本质 const实际上保证的,并不是变量 ...
- 指针与 const --- 指针常量与常量指针
注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...
- C中const 定义常量的使用
先看如下代码 #include <stdio.h> #include <string.h> #define ARRSIZE(a) (sizeof(a)/sizeof(a[0]) ...
随机推荐
- 服务端发送xml请求java代码示例
/** * */ package com.autoyol.pay.cmb.core; import java.io.ByteArrayOutputStream; import java.io.IOEx ...
- firefox浏览器live http headers无法使用
手贱的将firefox升级后,很多的插件不能使用.我这里因为用到live http headers,所以以此为例子.主要表现为live http headers修改数据包后,尤其是post数据包后,r ...
- iOS第三方推送-极光推送
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 《Thinking in C++》学习笔记(二)【第三章】
第三章 C++中的C 3.4.4 指针简介 ‘&’运算符:只要在标识符前加上‘&’,就会得出标识符的地址. C和C++有一个专门存放地址的变量类型.这个变量类型叫做指针(pointer ...
- sparksql链接mysql
1.在IDEA上建立一个sparksql_mysql的scala对象. 2.连接mysql的代码如下 import java.sql.{DriverManager, PreparedStatement ...
- HDU 1142 A Walk Through the Forest(SPFA+记忆化搜索DFS)
题目链接 题意 :办公室编号为1,家编号为2,问从办公室到家有多少条路径,当然路径要短,从A走到B的条件是,A到家比B到家要远,所以可以从A走向B . 思路 : 先以终点为起点求最短路,然后记忆化搜索 ...
- mysql之视图
视图 视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动态检索数据的查询. 理解视图最好的办法就是来看一下例子: SELECT cust_name , cust_contact FRO ...
- Unable to open debugger port : java.net.ConnectException “Connection refused”
http://stackoverflow.com/questions/28283087/unable-to-open-debugger-port-java-net-connectexception-c ...
- C/C++ 位域知识小结
C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...
- QTreeWidget的一个例子,C++语法和item迭代循环都比较巧妙
学习一下,据说QTreeWidget简单好用,不需要单独设置Model和View,更没有delegate.Signal和Slot应该可以正常使用(未验证,以后补充). #include <QtG ...