I am creating a graphing application that will display several graphs. The graphs will need access to some global data and some graph-specific data. For example, I want the colors consistent, so that would be global, but the specific graphs can have different grid spacing (per graph).
I created a “master object” with set defaults and a derived object with per graph configuration options
class GraphMasterObject {
public Color gridcolor = Color.Red;
}
class GraphObject : GraphMasterObject {
public int gridSpacing = 10;
}
Now, from my understanding, I should be able to do this
GraphObject go = new GraphObject();
Color c = go.gridColor;
How can I make it so that if I change go.gridColor, it will change across all objects that inherit from GraphMasterObject? Is this even possible? If not, what other solutions are possible? Something like
GraphMasterObject gmo = new GraphMasterObject();
gmo.gridColor = Color.Blue;
or
GraphObject go = new GraphObject();
go.gridColor = Color.Blue;
One common approach to have a single object instance shared among many objects is the Singleton Pattern.
http://en.wikipedia.org/wiki/Singleton_pattern
With the Singleton Pattern, any object can request the singleton object and will be returned the same singleton object instance as any other object that requests the singleton object.
That seems like a fine solution in your situation.
One way in C# to implement this pattern is by using a static property, e.g.:
Usage
UPDATE
Here’s an implementation that is superior to the one above, from the article provided by @Marksl