C#Singleton是否应该包含静态方法?

C#Singleton是否应该包含静态方法?,c#,methods,static,singleton,non-static,C#,Methods,Static,Singleton,Non Static,对于包含状态变量的类,我在选择使用Singleton还是Static之间有很多困难。我希望类对象实例化并仅作为一个对象存在 我知道这两种方法都可以存储状态变量Static类似乎很容易处理变量,因为所有方法都将变成Static,它们可以访问Static变量,而无需进行任何进一步的工作 但是,单例的情况不同。我有两种方法;需要访问单例的实例变量的一种,以及其他不需要访问实例变量的一种,我可以将其标记为静态 例如: /// <summary>Singleton.</summary&g

对于包含状态变量的类,我在选择使用
Singleton
还是
Static
之间有很多困难。我希望类对象实例化并仅作为一个对象存在

我知道这两种方法都可以存储状态变量
Static
类似乎很容易处理变量,因为所有方法都将变成
Static
,它们可以访问
Static
变量,而无需进行任何进一步的工作

但是,
单例
的情况不同。我有两种方法;需要访问
单例
实例
变量的一种,以及其他不需要访问
实例
变量的一种,我可以将其标记为静态

例如:

/// <summary>Singleton.</summary>
    public sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton(); /// <summary>Instance.</summary>
        public static Singleton Instance { get { return instance; } }

        private int integer; /// <summary>Integer.</summary>
        public int Integer { set { integer = value; } get { return integer; } }

        /// <summary>Constructor.</summary>
        private Singleton() { }

        /// <summary>TestA</summary>
        public void TestA(int val)
        {
            Integer = val;
        }

        /// <summary>TestB</summary>
        public static int TestB(int val)
        {
            return Instance.Integer * val;
        }

        /// <summary>TestC</summary>
        public static int TestC(int val)
        {
            return val * val;
        }
    }
///Singleton。
公共密封类单件
{
私有静态只读单例实例=新单例();///实例。
公共静态单例实例{get{return Instance;}}
私有整数;///整数。
公共整数{set{Integer=value;}get{return Integer;}}
///构造器。
私有单例(){}
///种皮
公共无效遗嘱(int val)
{
整数=val;
}
///测试B
公共静态int-TestB(int-val)
{
返回Instance.Integer*val;
}
///TestC
公共静态int-TestC(int-val)
{
返回val*val;
}
}
从上面给出的例子来看,有三种方法
TestA
TestB
TestC

  • TestA
    是一种可以访问其属性的
    非静态
    实例方法
  • TestB
    是一种
    静态
    方法,但访问
    实例
    以获取其属性
  • TestC
    是实例没有用处的
    静态方法
  • 这就引出了一个问题:

  • Singleton
    是否应该只包含
    静态
    方法,并通过
    静态
    实例
    属性访问其
    实例
    属性和方法?换句话说,所有方法都类似于
    TestB
    TestC
  • 单例
    是否应该只包含
    非静态
    方法,而不管它是否需要
    实例
    ?所有方法类似于
    TestA
  • Singleton
    是否应同时包含混合的
    静态方法和
    非静态方法(在本例中为
    TestA
    TestB
    种类)?我相信这会变得相当混乱
  • 如果没有,我该怎么办?我是否应该抛弃
    Singleton
    的想法,对每个只实例化一次的类使用所有
    静态

  • 编辑:对于类似的问题,
    Singleton
    是否应该在
    实例
    旁边包含任何
    静态
    变量/字段/属性?

    您不应该混淆这两种模式

    如果您有一个单例模式,那么唯一的静态字段应该是实例(+getter)。所有方法和字段都应该可以通过实例访问。如果你把它弄混了,只会引起混乱

    如果您选择静态类模式,则不要在内部使用秘密实例,这是.NET的工作

    如果您不确定哪种模式最适合您,请查看这篇单例与静态的文章。它解释了两者的优缺点: