zoukankan      html  css  js  c++  java
  • C#常量——const和readonly

    C#常量主要分为两种:编译时和运行时常量

    编译时常量用关键字const来定义,运行时常量用关键字readonly来定义

    两者区别:

       编译时常量,在编译时便用该常量的值代替常量变量。

       运行时常量,在运行时返回一个运行时常量的变量引用

    这两种变量引用方式会导致什么不同呢,且看下面代码:

      引用Effective C#中的例子:定义一个类库Limitation,其中呢定义了一个类Limitations,代码如下:

    public class Limitations
    {
    public static readonly int startValue =5;
    public const int endValue=10;
    }

    该类中包含两个量,一个是编译时常量,一个是运行时常量

    我在主程序中,引用该类库,并调用该类的相关值,代码如下:

    static void Main(string[] args)
    {
    for (int i = Limitations.startValue; i < Limitations.endValue; i++)
    {
    Console.WriteLine(i.ToString());
    }
    Console.Read();
    }

    运行结果:

    5

    6

    7

    8

    9

    现在我更新一下程序集Limitation,代码如下:

    public class Limitations
    {
    public static readonly int startValue =105;
    public const int endValue=120 ;
    }

    生成一下,替换掉原来的程序集,运行结果是什么也没有

    这是为什么呢?原来是跟两种变量的执行行为有关系,对于编译时常量,在编译时会用其值替换掉所有的编译时常量变量,当你更换程序集时,在引用的程序中,原来编译时常量的值不会改变,所以endValue仍为10;而对于运行时变量,因为在运行时保留的是运行时变量的引用,所以会用新的值代替掉原来的值,导致startValue的值为105.所以没有运行结果。

    从上边的例子,我们可以看出两种变量的使用情况,如果要使程序有好的可维护性可以选择运行时变量。

    对于编译时常量,由于在编译时就已经用值替换了变量,可以使程序在性能上有轻微的提高,所以如果程序很少有变动,则可以选择编译时常量。

  • 相关阅读:
    BAT脚本编写要点(1)_特殊字符
    开源爬虫软件汇总
    使用Gradle发布项目到JCenter仓库
    解决Android中,禁止ScrollView内的控件改变之后自动滚动
    理解RESTful架构
    一种为 Apk 动态写入信息的方案
    Proguard配置注解
    使用statsvn统计svn中的代码量
    android如何释放图片缓存
    Git命令参考手册(文本版)
  • 原文地址:https://www.cnblogs.com/ATually/p/1914587.html
Copyright © 2011-2022 走看看