<NET CLR via c# 第4版>笔记 第7章 常量和字段
7.1 常量
- 常量 是值从不变化的符号。定义常量符号时,它的值必须能够在编译时确定。
- 只能定义编译器识别的基元类型的常量,如果是非基元类型,需把值设为null。
- 常量的值直接嵌入代码,所以不能获取常量地址,不能以传引用的方式传递常量。
- 不能很好地支持跨程序集的版本控制(修改一个DLL中的常量值,需要重新编译所有引用该DLL的程序才可以)。
- 只有确定一个符号的值从不变化才应定义常量。
public sealed class SomeLibraryType
{
//注意:c#不允许为常量指定 static 关键字,
//因为常量总是隐式为 static
public const int MaxEntriesInList = 50;
}
7.2 字段
字段 是一种数据成员,其中容纳了一个值类型的实例或者对一个引用类型的引用。
CLR术语 C#术语 说明 Static static 这种字段是类型状态的一部分,而不是对象状态的一部分 Instance (默认) 这种字段与类型的一个实例关联,而不是与类型本身关联 InitOnly readonly 这种字段只能由一个构造器方法中的代码写入 Volatile volatile 编译器、CLR和硬件不会对访问这种字段的代码执行“线程不安全”的优化措施。只有以下类型才能标记为volatile:所有引用类型,Single,Boolean,Byte,SByte,Int16,UInt16,Int32,UInt32,Char,以及基础类型为Byte,SByte,Int16,Uint16,Int32或UInt32的所有枚举类型。 字段被标记为 readonly 时,不可改变的是引用,而非字段引用的对象 ,如:
public sealed class AType
{
//InvalidChars总是引用同一个数组对象
public static readonly char[] InvalidChars = new char[] { 'A', 'B', 'C' };
}
public sealed class AnotherType
{
public static void M()
{
//下面三行代码是合法的,可以通过编译,并可成功
//修改InvalidChars数组中的字符
AType.InvalidChars[0] = 'X';
AType.InvalidChars[1] = 'Y';
AType.InvalidChars[2] = 'Z';
//下一行代码是非法的,无法通过编译,
//因为不能让InvalidChars引用别的什么东西
AType.InvalidChars = new char[] { 'X', 'Y', 'Z' };
}
}
<NET CLR via c# 第4版>笔记 第7章 常量和字段的更多相关文章
- <NET CLR via c# 第4版>笔记 第17章 委托
17.1 初识委托 .net 通过委托来提供回调函数机制. 委托确保回调方法是类型安全的. 委托允许顺序调用多个方法. 17.2 用委托回调静态方法 将方法绑定到委托时,C# 和 CLR 都允许引用类 ...
- <NET CLR via c# 第4版>笔记 第6章 类型和成员基础
6.1 类型的各种成员 6.2 类型的可见性 public 全部可见 internal 程序集内可见(如忽略,默认为internal) 可通过设定友元程序集,允许其它程序集访问该程序集中的所有inte ...
- <NET CLR via c# 第4版>笔记 第8章 方法
8.1 实例构造器和类(引用类型) 构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零 .没有被构造器显式重写的所有字段都保证获得 0 或 null 值. 构造器不能被继承 ...
- <NET CLR via c# 第4版>笔记 第19章 可空值类型
System.Nullable<T> 是结构. 19.1 C# 对可空值类型的支持 C# 允许用问号表示法来声明可空值类型,如: Int32? x = 5; Int32? y = null ...
- <NET CLR via c# 第4版>笔记 第18章 定制特性
18.1 使用定制特性 FCL 中的几个常用定制特性. DllImport 特性应用于方法,告诉 CLR 该方法的实现位于指定 DLL 的非托管代码中. Serializable 特性应用于类型,告诉 ...
- <NET CLR via c# 第4版>笔记 第16章 数组
//创建一个一维数组 int[] myIntegers; //声明一个数组引用 myIntegers = new int[100]; //创建含有100个int的数组 //创建一个二维数组 doubl ...
- <NET CLR via c# 第4版>笔记 第13章 接口
13.1 类和接口继承 13.2 定义接口 C#用 interface 关键字定义接口.接口中可定义方法,事件,无参属性和有参属性(C#的索引器),但不能定义任何构造器方法,也不能定义任何实例字段. ...
- <NET CLR via c# 第4版>笔记 第12章 泛型
泛型优势: 源代码保护 使用泛型算法的开发人员不需要访问算法的源代码.(使用c++模板的泛型技术,算法的源代码必须提供给使用算法的用户) 类型安全 向List<DateTime>实例添加一 ...
- <NET CLR via c# 第4版>笔记 第5章 基元类型、引用类型和值类型
5.1 编程语言的基元类型 c#不管在什么操作系统上运行,int始终映射到System.Int32; long始终映射到System.Int64 可以通过checked/unchecked操作符/语句 ...
随机推荐
- 傅里叶变换 VS 拉普拉斯变换
拉普拉斯变换的公式 傅里叶变换公式 拉普拉斯变换是将时域映射到s plane上,而傅里叶变换实际是将时域 映射在s-plane的虚轴上, 傅里叶变换可以看作拉普拉斯变换 的一种特例 1.推导傅里叶变 ...
- layer官方演示与讲解(jQuery弹出层插件)
1. 使用layer遇到困难?Fly社区虔诚为您解惑 2. layer 2.0 发布,以独立形式呈现的最后一个版本 3. Fork layer on Github,爱她,就给她加个星啵 当前版本:2. ...
- Python Web开发之路
Flask相关 1.DBUtils数据库连接池 2.Flask之初体验 3.Flask之WTForms 4.Flask之信号 5.Flask之flask-session 6.Flask之flask-s ...
- pyqt简单介绍和使用
QML和PyQT5联合编程 安装pyqt pip3 install PyQT5 main.QML import QtQuick 2.2 import QtQuick.Controls 1.1 impo ...
- Python: 二进制、八进制、十六进制转换或者输出
为了将整数转换为二进制.八进制或十六进制的文本串,可以分别使用bin() ,oct() 或hex() 函数: >>> x = 1234 >>> bin(x) '0b ...
- iOS开发之开发者申请
一.对于真机调试,首先要在苹果网站上注册APP ID,以及购买iPhone Develop Program(iDP) 开发者授权,99美元.然后要创建证书请求CSR,创建步骤如下: 1.Mac O ...
- 前端学习笔记之CSS网页布局
CSS网页布局 阅读目录 一 网页布局方式 二 标准流 三 浮动流 四 定位流 一 网页布局方式 #1.什么是网页布局方式 布局可以理解为排版,我们所熟知的文本编辑类工具都有自己的排版方式,比如w ...
- 20145118 《Java程序设计》第1周学习总结
20145118 <Java程序设计>第1周学习总结 教材学习内容总结 由于寒假在家已经安装了java开发工具,所以安装过程在这里不再赘述.这一周我开始了Java初学阶段,从Java的历史 ...
- 20145311 《Java程序设计》第十周学习总结
20145311 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 ·网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据·程序员所作的事情就是把数据发送到指定的位置 ...
- MySQL的yum源
http://repo.mysql.com/ 超链接: http://repo.mysql.com/