• <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' };
            }
        }
    

    返回目录

  • 相关阅读:
    嵌入式(C)笔试题
    经典C语言编程注意点
    深拷贝和浅拷贝(一)
    拷贝构造函数
    树与二叉树的概念
    线性数据结构
    排序算法_冒泡排序
    排序算法_选择排序
    机器学习_支持向量机
    数据库_11_1~10总结回顾+奇怪的NULL
  • 原文地址:https://www.cnblogs.com/harry-wang/p/6868326.html
Copyright © 2020-2023  润新知