gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:17 26 4
gpt4 key购买 nike

我有一个 Common 项目,我在其中添加了 QueryStringNames 的公共(public)常量。

我知道通常常量应该是内部常量或私有(private)常量,但我在这里需要公共(public)常量,因为我想允许全局访问查询字符串名称、 session key 等。

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

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

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

最佳答案

这取决于。如果它确实是一个不会改变的常量,即使在您的代码的 future 版本中也是如此,那么 const 就可以了。否则使用 static readonly 字段。

const 将嵌入到调用程序集中,而对于 static readonly,调用程序集仅包含对该字段的引用。这意味着 const 需要在您更改值时重新编译所有相关代码,而 public readonly 即使不重新编译调用程序集也会使用新值。

如果您想将“常量”存储在配置文件中,但与 Intellisense 一样,您可以使用不带公共(public) setter 的属性。然后在运行时从配置文件中填充它。但我认为配置值一开始就不应该是 static 。对于配置值,我会使用某种单例,最好是 IoC 变体,而不是 Class.Instance 变体。所以我只定义如下接口(interface):

interface IMyConfig
{
string Key{get;}
}

并让需要此配置的类将其作为构造函数参数:

public MyClass(IMyConfig config)
{
...
}

关于c# - 在 C# 中实现全局常量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com