gpt4 book ai didi

c# - 具有公开属性的单例

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:08 24 4
gpt4 key购买 nike

我有一个看起来像这样的类:

public class Constants
{
private static readonly Lazy<Constants> lazy =
new Lazy<Constants>(() => new Constants());

public static Constants Instance { get { return lazy.Value; } }
Dictionary<string, List<string>> validApplicationTypes;
public Dictionary<string, List<string>> ValidApplicationTypes
{
get { return validApplicationTypes; }

}
private Constants()
{
// validApplicationTypes is populated from a DB table
}
}

现在在外面,我像这样访问有效的应用程序类型:

Constants.Instance.ValidApplicationTypes

向此类添加一堆字符串常量的最佳方法是什么?我应该像这样添加它们吗:

private static readonly string message= "SomeMessage";
public static string Message
{
get { return message; }
}

并像这样访问它们:Constants.Message

或者我应该这样添加它们:

   private string message= "SomeMessage";
public string Message
{
get { return message; }
}

并像这样访问它们:Constants.Instance.Message

这两种在单例内部创建它们和从单异常(exception)部访问它们的方式有什么区别吗?

最佳答案

Is there any difference between these 2 ways of creating them inside the singleton and accessing them from the outside?

是的。

前一个实现将在 Constants 的任何实例之前创建,并且可以像这样访问:

Constants.Message

后者在 Instance 初始化之前不会创建,并且可以像这样访问:

Constants.Instance.Message

向字段添加readonly 不会影响从“外部”访问它的方式,但会影响从内部访问它的方式。它只能在初始化期间或在所属类的构造函数中设置。

private static readonly string message= "SomeMessage";

private Constants()
{
message = "SomeMessage";
}

如果应用readonly,这将不会编译:

private void SetMessage()
{
message = "SomeMessage";
}

错误:

A static readonly field cannot be assigned to (except in a static constructor or a variable initializer)

关于c# - 具有公开属性的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272914/

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