• Effective C# 学习笔记(二)readonly和const的性能和灵活性的权衡


    运行时和编译时的常量的声明

    // Compile time constant:

    public const int Millennium = 2000;

    // Runtime constant:

    public static readonly int ThisYear = 2004;

     

    区别:

    编译时常量只能用来声明原始类型变量 int double float string and so on

     

    而运行时常量可以声明任何常量

     

    好处:

    在改变常量值的时候,用运行时常量声明的程序集 只需重新编译自己 而不需编译所有引用该程序集的应用程序就可改变程序集的版本,而编译时的常量则需编译所有的应用及相关程序集。

     

    用编译时变量的场景,如:程序的版本控制

     


     1 private const int Version1_0 = 0x0100;
     2 
     3 private const int Version1_1 = 0x0101;
     4 
     5 private const int Version1_2 = 0x0102;
     6 
     7 // major release:
     8 
     9 private const int Version2_0 = 0x0200;
    10 
    11 // check for the current version:
    12 
    13 private static readonly int CurrentVersion =
    14 
    15 Version2_0;
    16 
    17 You use the runtime version to store the current version in each saved file:
    18 
    19 // Read from persistent storage, check
    20 
    21 // stored version against compile-time constant:
    22 
    23 protected MyType(SerializationInfo info,
    24 
    25 StreamingContext cntxt)
    26 
    27 {
    28 
    29   int storedVersion = info.GetInt32("VERSION");
    30 
    31   switch (storedVersion)
    32 
    33   {
    34 
    35     case Version2_0:
    36 
    37     readVersion2(info, cntxt);
    38 
    39     break;
    40 
    41   case Version1_1:
    42 
    43   readVersion1Dot1(info, cntxt);
    44 
    45   break;
    46 
    47   // etc.
    48 
    49   }
    50 
    51 }
    52 
    53 // Write the current version:
    54 
    55 [SecurityPermissionAttribute(SecurityAction.Demand,
    56 
    57 SerializationFormatter = true)]
    58 
    59 void ISerializable.GetObjectData(SerializationInfo inf,
    60 
    61 StreamingContext cxt)
    62 
    63 {
    64 
    65 // use runtime constant for current version:
    66 
    67 inf.AddValue("VERSION", CurrentVersion);
    68 
    69 // write remaining elements...
    70 
    71 }

     

    总结:在属性参数和枚举参数中使用const ,其他情况请使用static readonly声明常量

  • 相关阅读:
    HTML5实现音频播放
    百度编辑器UEditor常用设置函数大全
    .Net一般处理程序来实现用户名的验证
    软件设计师13-数据库设计
    软件设计师12-数据流图
    百度云BCC安装WordPress镜像
    Java获取客户端真实IP地址
    软件设计师11-面向对象技术
    百度云BCC主机宝镜像
    软件设计师10-系统开发模型
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2096525.html
Copyright © 2020-2023  润新知