单例模式-默认属性

蒂姆·博斯威克

我一直在研究Settings类中使用的Singleton模式。这是我的项目AccessTest中Settings.Designer.cs中的相关代码:

internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{        
    private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

    public static Settings Default
    {
        get
        {
            return defaultInstance;
        }
    }

    public string applicationSetting1
    {
        get
        {
            return ((string)(this["applicationSetting1"]));
        }
    }
}

我不清楚的是为什么要通过另一个属性“ Default”访问属性“ applicationSetting1”,如下所示:

var value = AccessTest.Properties.Settings.Default.applicationSetting1;

我正在运行VS2013 C#和4.5。

蒂姆·博斯威克

关于singleton模式有很多文章,但是我找不到解决这个特定问题的文章。所以我想我会使用我在秘密实验室中借助您的帖子创建的这个示例自己解释一下:

namespace MyProject.Properties                                  
{                                   
    internal class Singleton                                
    {                               

        // Create an instance of the class itself.                          
        private static Singleton instance = new Singleton();                            

        // Wrap the instance in a public property.                          
        public static Singleton Instance                            
        {                           
            get {return instance;}                      
        }                           

        // Prevent additional references from being created with a private constructor.                         
        private Singleton() { }                         

        // Create a non-static variable.                                
        public string nonStatic = "non static";                         

    }                               
}                                   

我们了解有关Singleton类的以下知识:

  • “实例”公共属性只能静态访问。
  • “ nonStatic”不能静态访问,即只能通过引用访问。
  • 私有构造函数可防止创建其他引用。

那么,如何从类外部访问“ nonStatic”呢?

该框架通过赋予静态“实例”以仅在单例情况下才具有的魔力来解决难题:“实例”成为提供对任何非静态对象的访问的“桥梁”。嗯,这种形式的作品:

var value = MyProject.Properties.Singleton.Instance.nonStatic;                                  

注意:在Settings.Designer.cs文件中使用Microsoft的模式似乎不是真正的单例,因为默认构造函数允许创建其他引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章