2

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

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

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

4

2 回答 2

1

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

是的。

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

Constants.Message

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

Constants.Instance.Message

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

private static readonly string message= "SomeMessage";

或者

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

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

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

错误:

不能分配静态只读字段(静态构造函数或变量初始化程序除外)

于 2013-10-09T13:20:53.890 回答
0

嗯,为什么不

public const string Message = "SomeMessage";

?

于 2013-10-09T13:17:09.573 回答