2

いくつかのグラフを表示するグラフ作成アプリケーションを作成しています。グラフは、いくつかのグローバルデータといくつかのグラフ固有のデータにアクセスする必要があります。たとえば、色を一貫させてグローバルにする必要がありますが、特定のグラフのグリッド間隔は(グラフごとに)異なる場合があります。

デフォルトを設定して「マスターオブジェクト」を作成し、グラフごとの構成オプションを使用して派生オブジェクトを作成しました

class GraphMasterObject {
  public Color gridcolor = Color.Red;
}

class GraphObject : GraphMasterObject {
  public int gridSpacing = 10;
}

今、私の理解から、私はこれを行うことができるはずです

GraphObject go = new GraphObject();
Color c = go.gridColor;

go.gridColorを変更すると、GraphMasterObjectから継承するすべてのオブジェクトで変更されるようにするにはどうすればよいですか?これも可能ですか?そうでない場合、他にどのような解決策が可能ですか?何かのようなもの

GraphMasterObject gmo = new GraphMasterObject();
gmo.gridColor = Color.Blue;

また

GraphObject go = new GraphObject();
go.gridColor = Color.Blue;
4

2 に答える 2

3

なぜ継承を使用するのですか?すべてのGraphオブジェクトに渡すGlobalGraphSettingsオブジェクトだけを持っていないのはなぜですか?

MyColor = Graph.GlobalSettings.Color;
于 2012-11-13T03:38:06.080 に答える
2

単一のオブジェクトインスタンスを多くのオブジェクト間で共有するための一般的なアプローチの1つは、シングルトンパターンです。

http://en.wikipedia.org/wiki/Singleton_pattern

シングルトンパターンを使用すると、任意のオブジェクトがシングルトンオブジェクトを要求でき、シングルトンオブジェクトを要求する他のオブジェクトと同じシングルトンオブジェクトインスタンスが返されます。

それはあなたの状況では良い解決策のようです。

このパターンを実装するC#の1つの方法は、静的プロパティを使用することです。例:

public class MySingleton
{
    static private MySingleton singleton = null;

    private static readonly object padlock = new object();

    static public MySingleton Retrieve
    {
        get
        {
            lock (padlock)
            {
                if (singleton == null) singleton = new MySingleton(); // Initialize as needed
            }
            return singleton;
        }
    }
}

使用法

MySingleton singleton = MySingleton.Retrieve;

アップデート

@Markslによって提供された記事から、上記のものより優れた実装があります

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
    }
}
于 2012-11-13T03:24:58.060 に答える