Yuan天空
Yuan天空
  • 我的主页
  • 博客随笔
  • 软件作品
    • TK精灵(进程守护)
    • 远程运维助手
    • DicomStoreSCU
    • TKOCR(离线OCR)
    • 更多...
  • 学习资源
  • 网页工具
  • AI大模型
  • 网址收藏
  • HTML模板
专注.NET开发技术领域
  1. 主页
  2. 博客
  3. 发布页

C# 中使用const 常量可能会出现的版本更新问题!

C#const常量更新常量不生效
编程开发 2021-04-14 47

前言:

常量是一种表示恒定不变的值的符号,当定义一个常量时,我们必须在编译时就确定它的值,而当使用常量时,编译器首先从定义常量的模块元数据中查找符号,直接取出常量的值,然后就将它嵌入到编译后产生的IL代码中。

由于常量的值是直接嵌入到代码中的,所以常量在运行时不再需要任何的内存分配,所以我们不能获取常量的地址,或者以引用的方式来传递一个常量。

下面这个例子,我们会发现常量可能导致的版本更新问题 单独修改发布后仅替换MaxEntriesInList的Component.dll会发现输出值都会是第一次编译时的值

public class Component 
{ 
          public const Int32 MaxEntriesInList=50;
}
//接着引用这个对象:

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应用程序主程序,这是在使用常量时必须要注意和理解的一个问题。


同类文章
WPF 异步线程操作界面控件
Loading...
WPF 异步线程操作界面控件
C#解析获取GIF帧图像
Loading...
C#解析获取GIF帧图像
多图生成GIF动态图
Loading...
多图生成GIF动态图
.NET MVC网站路由伪静态设置方法
Loading...
.NET MVC网站路由伪静态设置方法
AJAX上传Form表单内容和文件
Loading...
AJAX上传Form表单内容和文件
C#实现冒泡排序算法
Loading...
C#实现冒泡排序算法
微信公众平台C#开发系列(一):为什么要微信公众号开发
Loading...
微信公众平台C#开发系列(一):为什么要微信公众号开发
wpf调用文件目录打开目录选择对话框
Loading...
wpf调用文件目录打开目录选择对话框
GDI+ 多图像按指定行列实现图像合并
Loading...
GDI+ 多图像按指定行列实现图像合并
c#实现调用XCopy命令实现目录备份的应用代码实例
Loading...
c#实现调用XCopy命令实现目录备份的应用代码实例
C#正则表达式判断程序路径是否存在中文字符
Loading...
C#正则表达式判断程序路径是否存在中文字符
微信公众平台C#开发系列(十三):模板消息-获得模板ID
Loading...
微信公众平台C#开发系列(十三):模板消息-获得模板ID

学习交流
1. 文明上网,理性表达,营造舒适的学习氛围
2. 请不要反馈提交与本页主题无关内容

标题目录
  • 前言:
  • 导致问题的原因:
  • 解决办法

学习资源
基于.NET4.0实现的目录文件新增监视并自动化上传至ftp完整流程工具源码
Loading...
基于.NET4.0实现的目录文件新增监视并自动化上传至ftp完整流程工具源码
visual studio 2019在线安装包和激活码密钥key
Loading...
visual studio 2019在线安装包和激活码密钥key
 远程控制软件Radmin3.4 中文完整版(控制端和被控端)
Loading...
远程控制软件Radmin3.4 中文完整版(控制端和被控端)
C#基于ffmpeg.exe实现视频添加字幕转GIF表情包的源码
Loading...
C#基于ffmpeg.exe实现视频添加字幕转GIF表情包的源码
.NET5+C# WPF实现图片添加倾斜文字平铺水印工具源码
Loading...
.NET5+C# WPF实现图片添加倾斜文字平铺水印工具源码
基于Wpf+MVVM实现的完整截图软件的框选区域效果源码
Loading...
基于Wpf+MVVM实现的完整截图软件的框选区域效果源码