C#中常量可能导致的版本更新问题!

常量是一种表示恒定不变的值的符号,当定义一个常量时,我们必须在编译时就确定它的值,而当使用常量时,编译器首先从定义常量的模块元数据中查找符号,直接取出常量的值,然后就将它嵌入到编译后产生的IL代码中。由于常量的值是直接嵌入到代码中的,所以常量在运行时不再需要任何的内存分配,所以我们不能获取常量的地址,或者以引用的方式来传递一个常量。

下面这个例子,我们会发现常量可能导致的版本更新问题:

using System;

public class Component

{

    public const Int32 MaxEntriesInList=50;

}

接着引用这个程序集:

using System;

class app

{

    static void Main()

    {

        Console.WriteLine(“Max entries supported in list:”+Component.MaxEntriesInList);

    }

}

上面的程序引用了MaxEntriesInList常量,当该应用程序被编译时,编译器会发现MaxEntriesInList是一个值为50的常量符号,就将其整数值50直接嵌入到应用程序的IL代码中。这会导致应用程序编译成功后,即使不存在原先应用的DLL程序集,也能正常运行,我们完全可以在编译成功后,删除Component.dll。

这意味着,如果我们把前面Component程序集中的MaxEntriesInList修改为1000,并重新编译MaxEntriesInList.dlll后,app应用程序将不会感知这一切,因为它不会再去MaxEntriesInList.dll中获取MaxEntriesInList常量的值,除非我们重新编译app应用程序,这是在使用常量时必须要注意和理解的一个问题。

转载于:https://www.cnblogs.com/ajiefjcn/archive/2009/03/08/1406207.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值