<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操作符/语句 ...
随机推荐
- [py]class的特殊方法
类方法 解释 hasattr hasattr(class) getattr - setattr - delattr - - - __getattr__ __setattr__ __delattr__ ...
- Hadoop 编写WordCount
本文发表于本人博客. 前面几次讲了关于Hadoop的环境搭建.HDFS操作,今天接着继续.本来Hadoop源码中就有一个例子WordCount,但是今天我们来自己实现一个加深对这个Mapper.Red ...
- C语言的 32个关键之和9个控制语言之关键字
auto break case char const continue default do double else enum extern float for goto ...
- HTML格式布局
一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. #top { border:1px solid #; height:100px; width:966 ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 51: ord
1.问题描述:一个在Django框架下使用Python编写的定时更新项目,在Windows系统下测试无误,在Linux系统下测试,报如下错误: ascii codec can't decode byt ...
- nats
NATS is a family of open source products that are tightly integrated but can be deployed independent ...
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- session的三种超时设置
1. 在web容器中设置(此处以tomcat为例) 在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置: <!-- ========= ...
- 裸眼 3D 技术是什么原理?
https://www.zhihu.com/question/19553745 作者:杨英东链接:https://www.zhihu.com/question/19553745/answer/1227 ...
- 【转载】通过JSFL让Flash Professional CS4或CS5拥有批量FLA导出SVG的功能
近期一个项目要求博主爱吾所爱(爱生活=爱技术)将 所有的.fla源文件里的图形都转为.svg矢量图,经常一番搜索之后,发现新版本的Flash Professional CC已经有此功能,但无奈我等用的 ...