zoukankan      html  css  js  c++  java
  • <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#术语说明
      Staticstatic这种字段是类型状态的一部分,而不是对象状态的一部分
      Instance(默认)这种字段与类型的一个实例关联,而不是与类型本身关联
      InitOnlyreadonly这种字段只能由一个构造器方法中的代码写入
      Volatilevolatile编译器、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' };
            }
        }
    

    返回目录

  • 相关阅读:
    mysql原生语句基础知识
    利用layui前端框架实现对不同文件夹的多文件上传
    简述layui前端ui框架的使用
    利用bootstrap-select.min.js实现bootstrap下拉列表的单选和多选
    使用pycharm进行远程开发部署调试设置 与 远程部署调试是否必须使用远程主机的解释器?
    博客园积分规则
    mysql 数据库的备份与恢复
    flask 利用flask_wtf扩展 创建web表单
    jquery ajax几种书写方式的总结
    LightSpeed 的Left Join Bug解决方案
  • 原文地址:https://www.cnblogs.com/harry-wang/p/6868326.html
Copyright © 2011-2022 走看看