加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中实现全局常量的最佳方法是什么?

发布时间:2020-12-15 04:28:18 所属栏目:百科 来源:网络整理
导读:我有一个Common项目,我已经添加了我的QueryStringNames的公共常量. 我知道一般来说,常量应该是内部或私有的,但是我需要公共常量,因为我想允许全局访问查询字符串名称,会话密钥等. 我知道有3种解决方案,但都有一个重要的问题.调用者程序集将包含我的常量的副
我有一个Common项目,我已经添加了我的QueryStringNames的公共常量.

我知道一般来说,常量应该是内部或私有的,但是我需要公共常量,因为我想允许全局访问查询字符串名称,会话密钥等.

我知道有3种解决方案,但都有一个重要的问题.调用者程序集将包含我的常量的副本,这意味着如果我必须更改常量值,我将必须编译我的公共程序集和调用程序集合!

1) public const string ConstName = "a value";
2) public readonly string ConstName = "a value";
3) To be stored in a public resource file.

在C#中定义公共常量的最佳方法是将它们存储在web.config文件中(没有智能感知)?

解决方法

这取决于.如果它是一个不变的常数,即使在将来的代码版本中,const也是可以的.还有一个静态的只读字段.

一个const将嵌入到调用组件中,而静态readonly则调用组件仅包含对该字段的引用.这意味着,每当更改值时,const都需要重新编译所有相关代码,而public readonly即使不重新编译调用程序集也使用新值.

如果要将“常量”存储在配置文件中,但像??Intellisense一样,可以使用没有公共设置器的属性.然后在运行时从配置文件中填写.但是我认为配置值首先不应该是静态的.对于配置值,我将使用某种类型的单例,最好是IoC变体,而不是Class.Instance变体.所以我只是定义一个接口,如下所示:

interface IMyConfig
{
  string Key{get;}
}

并且需要这个配置的类将其视为构造函数参数:

public MyClass(IMyConfig config)
{
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读