.NET中的ResourceManager是单身吗?
答案 0 :(得分:1)
如果在处理资源文件时查看设计器生成的代码,您可以看到每个生成的资源属性都访问一个内部静态属性,如果尚未创建ResourceManager
实例,则会创建该属性,然后重用此实例。从这个角度来看,对我来说它看起来像是Singleton(即使具体的Singleton实现可能不是最好的,也许)。
示例(使用名为MyResourceFile.resx的资源文件,使用名为SomeStringResource的字符串资源):
// You access the resource like so
MyResourceFile.SomeStringResource;
// The generated SomeStringResource property
internal static string SomeStringResource {
get {
return ResourceManager.GetString("SomeStringResource", resourceCulture);
}
}
// The generated ResourceManager property
private static global::System.Resources.ResourceManager resourceMan;
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleApplication.MyResourceFile", typeof(MyResourceFile).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
正如您在ResourceManager
属性中所看到的,它会检查resourceMan
是否为null
,只有在ResourceManager
创建新ResourceManager
时才会生成{{1}}。后续调用将使用当时已创建的{{1}}实例。这意味着将只创建一个实例然后重用,这是Singleton模式的重点。
答案 1 :(得分:0)
从它的用法来看,我会说不。我认为这更像是一个工厂类或类似的东西。
因为用法是这样的:
Resources.SomeResourceYouMade;
如果它是单例,你必须首先访问该实例,然后是资源,所以它看起来更像是这样:
Resources.Instance.SomeResourceYouMade;
此外,这里有一些关于实例化资源管理器的信息,甚至来自不同的程序集(link)。
答案 2 :(得分:0)
System.Resources.ResourceManager具有公共构造函数,因此不是单例。