我有一个看起来像这样的课程:
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
在单身内部创建它们并从外部访问它们的这两种方法之间有什么区别吗?
答案 0 :(得分: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";
}
错误:
无法分配静态只读字段(静态除外) 构造函数或变量初始化程序)
答案 1 :(得分:0)
public const string Message = "SomeMessage";