具有公开属性的单例

本文关键字:单例 属性 | 更新日期: 2023-09-27 18:34:46

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

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

在单例内部创建它们和从外部访问它们的这两种方法之间有什么区别吗?

具有公开属性的单例

这两种在内部创建它们的方法之间有什么区别吗 单身人士并从外部访问它们?

是的。

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

Constants.Message

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

Constants.Instance.Message

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

private static readonly string message= "SomeMessage";

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

如果应用readonly,则不会编译:

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

错误:

静态

只读字段不能分配给(除非在静态 构造函数或变量初始值设定项(

嗯,为什么不呢

public const string Message = "SomeMessage";