代码之家  ›  专栏  ›  技术社区  ›  jack-london

.NET中的ResourceManager是单实例吗?

  •  -1
  • jack-london  · 技术社区  · 17 年前

    .NET中的ResourceManager是单实例吗?

    3 回复  |  直到 17 年前
        1
  •  1
  •   Fredrik Mörk    17 年前

    如果在处理资源文件时查看设计器生成的代码,则可以看到生成的每个资源属性都访问将创建 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;
        }
    }
    

    正如你在 资源管理员 属性,它检查 resourceMan 是 null 创建一个新的 资源管理员 只有这样。后续调用将使用已创建的 资源管理员 实例。这意味着将只创建一个实例,然后重用,这就是单例模式的要点。

        2
  •  0
  •   Joseph    17 年前

    从它的使用情况来看,我会说不。我认为它更可能是一个工厂类或类似的东西。

    既然用法是这样的:

    Resources.SomeResourceYouMade;
    

    如果它是单例的,那么您必须先访问实例,然后访问资源,因此它看起来更像这样:

    Resources.Instance.SomeResourceYouMade;
    

    此外,这里还有一些关于实例化资源管理器的信息,即使是来自不同的程序集( link )

        3
  •  0
  •   to StackOverflow    17 年前

    System.Resources.ResourceManager具有公共构造函数,因此不是单例的。

    推荐文章