c# - 如何访问单例类的静态方法?

标签 c# asp.net oop

我对单例类有些困惑,以下是我的一些观点:

  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.StaticAddMethod();

对比

Singleton.Instance.AddMethod();

另请注意,有更简单的实现单例的方法,可以通过更少的锁定等实现相同的效果。

再说单例和静态的区别;单例可能会实现一个接口(interface),允许您将其传递到现有代码中。您还可以(正如您确实在做的那样)推迟构建单例(但仍然允许访问不涉及单例实例的静态方法)。但是是的:静态和单例之间有很多交叉点。

关于c# - 如何访问单例类的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206517/

相关文章:

c# - 这个特定的别名 SQL 列是否存在问题?

c# - ASP.NET MVC 日期时间范围

c# - 如果使用可为空的 int 变量,LINQ 返回 0 个结果,如果使用 "null",则返回准确的结果

c# - 如何在下拉列表中添加表字段的2列值

c# - LINQ查询问题

c# - 如何在 Visual Studio 2015 中设置 TypeScript 环境

python - 我对 OOP 中对象的行为有点困惑

java - 我没有从我的 java 应用程序中得到预期的输出

python - 如何使用一个数组的索引来定义另一个数组的 __getitem__ ?

c# - 查询字符串模型绑定(bind) ASP.NET WebApi