学习

解决方案 »

  1.   

    private - 这个成员只能在本类内使用
    static - 这个成员不需要实例化即可使用
    readonly - 这个成员只能在“类初始化”时赋值所谓的“类初始化”,是下面两者之一
    1) 直接在定义后面写值,例如
        private static readonly Hashtable SharedHashtable = new Hashtable();
    2) 在“类构造函数”里写值,例如
        static ClassName() {
             SharedHashtable = new Hashtable();
        }如果看 1),感觉上好像跟 const 有点联系,但是 const 是在编译的时候就计算结果的,这样的话,多数引用类型都无法赋值——new 操作符只能在运行时使用。我所知道的可以写到 const 字段的引用类型就只有字符串一种。static readonly 的话,在第一次访问该类的时候才赋值,所以能用new,如上述例子最后,const隐含static的语义,所以只需要写private const即可
      

  2.   

    static readonly
    //效果等同与const
      

  3.   

    static 不能和 const一起使用。因为const关键字隐藏的语义有static的意思。const 和 readonly的主要区别在于三个方面:
    1。静态方面    const是编译时静态,readonly是运行时多态
    2。初始化方面  const变量在声明的同时就要求赋值,而readonly变量则可以推迟进行初始化。
    3。类型方面    const修饰的数据类型是简单类型,而readonly即可以是简单类型也可以是引用类型。
      

  4.   

    打错了。更正:
    1。静态方面 const是编译时静态,readonly是运行时静态。这就印证了2。初始化 的内容  由于const变量必须在编译的时候确定所有在声明const变量的同时就必须要对它赋值,而readonly是运行时的静态,它不需要在声明的同时给它赋值..
      

  5.   

    补充下这个编译时和运行时。
    a.dll 中class1 中,定义public const int i = 10;在project b中,引用a.dll
    Console.WriteLine(class1.i);输出结果是10;这个时候修改a.dll中的class1的i为20,重新编译a然后运行b,结果仍旧是10
    这就是所谓的编译嵌入
    修改a.dll中的public const 为public static readonly 
    重新试验上面的步骤,即可得出结果为10,20这是所谓的动态加载