0

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

但是,我被卡住了,因为基类的构造函数想要调用单例类的构造函数,但它不能,因为它被标记为私有。

我该如何解决这个问题?我正在尝试做的事情可能吗?由于对这篇文章的回应,我走上了这条路:我可以制作一个“全局”对象来存储多个对象的变量吗?

例如,

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 
4

1 回答 1

7

好的,我有一个单例类 GraphMaster,其中包含许多系统范围的值。我有一个子类 GraphObject : GraphMaster ,它具有特定于图形的数据。

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

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

于 2012-11-13T11:07:25.103 回答