代码之家  ›  专栏  ›  技术社区  ›  Vijjendra

如何访问singleton类的静态方法?

  •  2
  • Vijjendra  · 技术社区  · 15 年前

    我对单件课有些困惑,下面是我的一些观点:

    1. 单例类可以有静态方法吗?,如果是,那么我们如何调用该方法?
    2. 静态类和单例类的主要区别是什么?

    我已经创建了以下单例类:

     public class Singleton
        {
            private static  Singleton _instance = null;
            private static object chekLock = new object();
            private Singleton()
            {}
    
            public static Singleton Instance
            {
                get
                {
                    lock (chekLock)
                    {
                        if (_instance == null)
                            _instance = new Singleton();
                        return _instance;
                    }
                }
            }
    
            public static void StaticAddMethod()
            {
                Console.WriteLine("Add Method");
            }
    
            public void AddMethod()
            {
                Console.WriteLine("Add Method");
            }
        }
    

    在上面的类结构中,我创建了两个方法,一个是静态的,另一个是非静态的,当我试图访问静态方法时,它会给我编译时错误。

    如何使用singleton类的静态方法?

    7 回复  |  直到 15 年前
        1
  •  6
  •   Marc Gravell    15 年前

    你想怎么访问它?要访问静态方法,请使用类型名:

    Singleton.StaticAddMethod();
    

    VS

    Singleton.Instance.AddMethod();
    

    还需要注意的是,有一些更简单的实现单例的方法,可以在较少的锁等情况下实现相同的效果。

    是singleton和static之间的区别;singleton可能实现一个接口,允许您将其传递到现有代码中。您还可以(实际上是这样做的)推迟单例的构造(但仍然允许访问不涉及单例实例的静态方法)。但是是的:静态和单态之间有很多交叉。

        2
  •  2
  •   Kirk Woll    15 年前

    您应该通过以下方式访问静态方法:

    Singleton.StaticAddMethod()
    

    或者,如果你已经 里面 Singleton ,然后只是:

    StaticAddMethod()
    

    区别在于静态方法可以从任何地方访问。实例方法要求对类的已创建实例调用该方法。对于单件,这意味着该类 实例 字段/方法,但您可以通过静态 Instance 属性。

        3
  •  2
  •   Andrew Bezzub    15 年前

    静态方法属于类型本身,而不是类型的实例。所以可以这样调用静态方法:

    Singleton.StaticAddMethod()
    
        4
  •  2
  •   skwear    9 年前

    静态方法可以直接从类型调用。您不需要创建实例来执行此操作。

    所以

    Singleton.StaticAddMethod();
    

    会有用的

    同时更改您的声明

    private static  Singleton _instance = null;
    

    private static READONLY  Singleton _instance = new Singelton();
    

    这将允许您摆脱正在执行的所有锁定,因为只读只能在创建时分配,从而保护您免受可能遇到的任何锁定;)

    public static Singleton Instance        
    {            
        get
        {
            return _instance;
        }
    }
    
        5
  •  1
  •   Hogan    15 年前

    这样地:

    Singleton.StaticAddMethod();
    
    Singleton.Instance.AddMethod();
    
        6
  •  0
  •   Pedro    15 年前

    对于第二个问题,两者之间的一个区别是,一个单例类可以被分类,并以静态类不能的方式参与多态行为。

        7
  •  0
  •   ElMatador    15 年前

    下面是一个如何访问线程安全的singleton类的成员以及如何对该类进行编码的示例。

    http://www.helplessautomation.com/2011/01/creating-a-singleton-in-c-instance-class/

    缉毒神鹰