• const,readonly字段的取舍!


    如果想在类中定义某些常量字段,一般有两种选择,可以定义成const,也可以定义成readonly,这两种方式如何取舍呢?

    在绝大多数情况下,readonly是要优于const的,因为readonly可以带来更大的灵活性!一般我们可以认为const是编译时常量,也就是说你引用const字段,在编译的时候就被替换成相应的常量值了!

    例如:

    public class MyClass

    {

          public const int Count=0;

    }

    static void Main(string[] args)

    {

         int i=MyClass.Count ;

    }

    在编译器看来,Main方法实际上相当于这样:

    static void Main(string[] args)

    {

         int i=0;

    }

    而readonly字段刚好和const字段相反,我们可以认为他是运行时常量,也就是说你引用readonly字段,他的值是运行时确定的,这样就带来了很大的灵活性

    而const有时可能会破坏二进制的兼容性,看我们刚才那个例子,比如你的MyClass是定义在另外一个dll中而当前的项目是引用这个dll的,这到是没有什么问题!但是将来需求突然改变了,如果count需要赋值为100了,这样你不得不修改代码,发布一个dll的新版本!由于const字段是编译时常量,所有引用这个字段的代码在编译的时候就已经被替换为相应的值了(值是0),这样带来的问题是所有引用这个字段的程序集都需要重新编译才能正确运行,这样就破坏了二进制的兼容性!

    而使用readonly字段就可以避免这个问题,因为所有引用readonly字段的代码编译的时候并没有被替换成字段的值!

    那const是不是没有任何的优点了呢?

    实际上编译时常量在效率上是优于运行时常量的,但是差别并不是很大 !

    只有你真正的确定这个字段的值永远都不会变了,这时才使用const,这时可以获得有限的性能改善!

    否则,最好使用readonly字段!

  • 相关阅读:
    在归并排序中对小数组采用插入排序实现代码
    PAT 1032. Sharing
    1031. Hello World for U
    PAT 1030. Travel Plan
    PAT 1029. Median
    PAT 1028. List Sorting
    PAT 1027. Colors in Mars
    PAT 1026. Table Tennis
    PAT 1025. PAT Ranking
    Several Important Commands in GMT
  • 原文地址:https://www.cnblogs.com/xuefeng1982/p/1505263.html
Copyright © 2020-2023  润新知