zoukankan      html  css  js  c++  java
  • 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声明常量

  • 相关阅读:
    shell 网络状态查询 ping curl telnet
    shell 命令 rz sz
    shell 命令之 jps
    Python 之 threading
    根据 MySQL 状态优化 ---- 4. 临时表
    根据 MySQL 状态优化 ---- 3. key_buffer_size
    根据 MySQL 状态优化 ---- 2. 连接数
    根据 MySQL 状态优化 ---- 1. 慢查询
    Linux 服务器的网络配置
    Linux 服务器的网络配置
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2096525.html
Copyright © 2011-2022 走看看