c#基础--常量(const),只读字段(readonly)
1.0:常量
常量被关键字const 所修饰 我们来看看常量的demo
class Program
{
static void Main(string[] args)
{
const string name = "soaeon";
Console.WriteLine(name);
Console.ReadKey();
}
}
下面我们看看该demo的反编译结果

哈哈 关于反编译的结果 我们可以看到 定义的 const string name="soaeon"; 不见了。 而在我们的 console.WriteLine("soaeon") 直接用比变量值给取代了 从这里 你发现了什么呢?
static void Main(string[] args)
{
const string name = "soaeon";
Console.WriteLine(name);
Console.ReadKey();
/* 1. 常量: 被const修饰的数据叫做常量.
* 常量的值1旦声明,就无法更改.
*
* 2. 为什么常量的无法改变?
* 经过反编译,我们发现声明常量的那句话不见了.
* 在使用常量的地方 直接用常量的值 代替了.
* 就算可以改也没有任何意义.
*
* 3. 声明常量的时候
* a. 常量声明的同时必须要赋值.
* b. 常量的值要求在编译的时候就可以确定.
*
* 在编译的时候,编译器无法知道变量的值. 只有在运行起来的时候才知道.
*
* 4. 常量可以是局部的,也可以使成员的.
* 当常量作为成员变量的时候, 通过类名直接点出来访问.而不是通过对象名,
*
* 5. 什么时候我们可以定义常量
* 如果有1个数据在整个程序的运行期间都不会发生变化.
* 那么这个时候我们可把这个数据定义为常量以提高程序的运行效率.
*/
}
2.0readonly 只读字段
我们看看 radonly的相关demo
class Person
{
public readonly string name = "jack";
public int age;
public bool gender;
public Person(string name)
{
this.name = name;
}
}
有木有发下 readonly 虽然意为 只读 但是我们惊奇的发现 被关键字readonly修饰的字段可以在构造函数中修改 没错 你没看见 这也是被readonly修饰的字段唯一可以重新赋值的地方
3.0 const 和readonly的区别
const的值 必须要在编译的时候就确定下来 从上面的反编译中可以看出 编译之后 在要使用的位置其实已经使用常量的值给代替了
readonly 是要运行的时候 在构造函数中确定 所以唯一能重新赋值的地方是在构造函数中
c#基础--常量(const),只读字段(readonly)的更多相关文章
- php基础-----常量const和define的区别
1.常量是一个简单的标识符,在脚本运行期间,值不可改变,默认大小写敏感. 答:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比def ...
- 只读字段(readonly)和常量(const)
1.常量 一个包含不能修改的值的变量,通过const关键字定义.只能在声明的同时赋值 2.只读字段 通过readonly关键字定义. 可以在声明的同时赋值. 对于实例字段,在包含字段声明的类的实例构造 ...
- const,readonly 常量与只读
Const是常量 Const在编译时会被编译为静态成员,它确定于编译时期,属类型级,通过类型来访问. 现在通过以下几种情况来说明const常量: (1)初始化 public const string ...
- 常量(const)和只读变量(readonly)
//const修饰的数据叫做 常量 //常量一旦声明常量的值就不能改变. //常量在声明的时候 必须要赋初始值 //C#编译器在编译的时候 声明常量的那句话不见了. //在使用常量的地方就用常量的值代 ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- 破解C#的readonly只读字段
破解C#的readonly只读字段 目录 请允许我再唠叨几句const和readonly 修改readonly字段: 计策1:反间计 -- 反射修改 计策2:借刀杀人--调节字段偏移位置的结构体来修改 ...
- c#只读字段和常量的区别,以及静态构造函数的使用 .
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...
- C#中的静态常量(const)和动态常量(static和readonly)用法和区别
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...
- c#学习系列之字段(静态,常量,只读)
C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量.static变量在对象被实例化时创建,通过对象进行访问一个类的所 ...
随机推荐
- Quora 用了哪些技术(转)
原文:http://dbanotes.net/arch/quora_tech.html 很多团队都在学习.研究 Quora .前段时间看到这篇 Quora’s Technology Examined ...
- SQL SERVER安装提示“安装了 Microsoft Visual Studio 2008 的早期版本
工作共遇到的问题记录: 安装Sql Server 2008 R2时提示错误:“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2 ...
- 测试peerdroid示例程序步骤
来自JXTA交流群(36855950)...韦发改(992611244) 15:12:25—————————————————————————————————————————————————————— ...
- 如何通过写一个chrome扩展启动本地程序
@(编程) [toc] 本文介绍如何利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地程序.本文的环境是windows10,本文的例子是通过点击网页上的一个button,调用本地的wor ...
- js 设置回车事件
document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.argumen ...
- C++中使用接口
面向对象的语言诸如JAVA提供了Interface来实现接口,但C++却没有这样一个东西,尽管C++ 通过纯虚基类实现接口,譬如COM的C++实现就是通过纯虚基类实现的(当然MFC的COM实现用了嵌套 ...
- eclipse 最有用的10个快捷键
1Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- 解决window8 下连接PLSQL 报ora-12154错误
操作系统版本:window8 64位企业版 数据库:oracle10g2 安装PLSQL,登录PLSQL报ORA-12154错误. 首先:所以需要下载一个32位客户端,我同时也下载了64位客户端,具体 ...
- C:函数指针、回调函数
函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...
- STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...