【问题标题】:Using const as version number [closed]使用 const 作为版本号 [关闭]
【发布时间】:2012-09-12 11:27:46
【问题描述】:

我需要检查我的一个组件中的某个版本。出于这个原因,我只想介绍一个我可以测试的 public const int 。

但是,我刚刚在这篇 SO 帖子 When, if ever, should we use const? 中读到,在未来发生变化时使用 const 可能是个坏主意。

最好的方法是什么?使用公共只读 int?使用属性?我不能使用 AssemblyVersion 或 AssemblyFileVersion,因为它们不在我的手中......

谢谢!

【问题讨论】:

  • those are not in my hand,对不起,你到底是什么意思?
  • 你能解释一下为什么你不能使用 AssemblyVersion 等它们的用途吗?当然,如果你要发布一个新版本的程序集,那么你可以控制它。
  • 我可能比实际阅读更多,但是当我阅读 OP 的帖子时,我感觉到他的组件正在被其他人在他们的程序集中使用。然而,为了很好地协同工作,他的组件需要能够检查兼容性。如果我是对的,我同意下面的 Bart,并且认为为此目的使用 const 没有问题。
  • AssemblyVersion 是全局分配的。我不知道 AssemblyVersion 的价值。所以我不知道哪些版本是兼容的。
  • @Kevin:你说得对。只是当我阅读其他 SO 帖子时,我的印象是,如果我增加我的 const 并交换我的 dll,其他程序集可能仍然使用旧的 const 值......

标签: c# constants readonly


【解决方案1】:

我会使用 const(事实上,我确实使用它)。 readonly 在运行时初始化,实际上,每次运行应用程序时它都可以有不同的值 [1]。由于该属性,我会说它对版本号的用处不大。

版本号(应该是?)在编译时硬编码,即const。比较可能是 C 中的 #define

我认为由于这种差异,const 不像 readonly 那样使用数据内存。不过我没有这方面的消息来源。

[1]http://en.csharp-online.net/const,_static_and_readonly

【讨论】:

  • readonly 不必是静态的,因此使用的内存与const 不同(就内存而言,它就像静态字段一样)。
  • 只是当我阅读其他 SO 帖子时,我的印象是,如果我增加我的 const 并交换我的 dll,其他程序集可能仍然使用旧的 const 值......
  • @Dunken,我不知道会不会是这样。但它很容易测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多