C# 防止singleton类的子类调用singleton';s构造函数

C# 防止singleton类的子类调用singleton';s构造函数,c#,singleton,subclass,C#,Singleton,Subclass,好的,我有一个单例类GraphMaster,它包含许多系统范围的值。我有一个子类GraphObject:GraphMaster,它具有特定于图形的数据。通过子类化,我可以访问全局类或子类的成员。通过使用单例类,我可以在任何地方更改全局变量,并使它们反映在所有子类中 然而,我被卡住了,因为基类的构造函数想要调用单例类的构造函数,但它不能,因为它标记为private 我该怎么做?我想做的事可能吗?我走上这条路是因为对这篇文章的回应: 比如说, public class GraphMasterObje

好的,我有一个单例类
GraphMaster
,它包含许多系统范围的值。我有一个子类
GraphObject:GraphMaster
,它具有特定于图形的数据。通过子类化,我可以访问全局类或子类的成员。通过使用单例类,我可以在任何地方更改全局变量,并使它们反映在所有子类中

然而,我被卡住了,因为基类的构造函数想要调用单例类的构造函数,但它不能,因为它标记为private

我该怎么做?我想做的事可能吗?我走上这条路是因为对这篇文章的回应:

比如说,

public class GraphMasterObject {
    private static GraphMasterObject instance;
    private GraphMasterObject() {   }
    }

    public static GraphMasterObject Instance {
        get {
            if (instance == null) instance = new GraphMasterObject();
            return instance;
        }
    }
    public int globalVar=10;
}

public class GraphObject : GraphMasterObject {

   public GraphObject() {
   }

   public int localVar=20;
}
我希望能够做到

GraphObject go = new GraphObject();
go.globalVar <- this is 10
GraphMasterObject.Instance.globalVar = 20;
go.globalVar <- now this is 20 
GraphObject go=new GraphObject();
去环球吧
好的,我有一个单例类GraphMaster,它包含许多系统范围的值。我有一个子类GraphObject:GraphMaster,它有特定于图形的数据

首先,这是一个问题。一旦你有了一个有子类的类,根据定义它就不是一个单例。有人可以在任何时候添加另一个子类,即使每个子类只有一个实例,也会有两个与基类兼容的不同实例


如果已经有实例,可以在基类构造函数中添加一些东西来抛出异常,但这会非常糟糕。从根本上说,单例与子类化是不兼容的。重新考虑你的设计。(理想情况下,首先要避免单例模式,但那是另一回事……

不应继承单例类。因为GraphObject是GraphMasterObject的更具体的类,从语义上讲,它也必须是单例。我应该正确地阅读问题,我应该阅读。。。。删除我的答案,不是op想要的。获得我想要的功能的最佳方式是什么?也许是反射魔法?@reza:正如我所说,你应该重新设计。为什么要从
GraphMasterObject
派生
GraphObject
?为什么这是一个有用的属性?我想要一种透明的方式来访问子类和基类中的变量,但是我想要基类的变量在所有对象中保持一致,并且子类变量随对象而变化。