1

私はこのようなものを持っています:

public class Map
{
    class DataHandler
    {
        private int posX, posY;
        // Other attributes

        public int GetX() { return posX; }
        public int GetY() { return posY; }
        // Other functions for handling data (get/set)
    }

    class FileHandler
    {
        // Functions for reading/writing setting files
    }

    DataHandler Data;
    FileHandler Files;

    public Map()
    {
        Data = new DataHandler();
        Files = new FileHandler();
    }
}

ここで、設定ファイルを作成するときに、クラスのいくつかの変数 (非静的) を読み取る必要がありますDataHandler。たとえば、ファイルに書き込むためにandメソッドを使用してposXandの値を取得したいとします。「ファイル」インスタンスからマップの「データ」インスタンスにアクセスするにはどうすればよいですか? ファイルを書き込む関数にパラメーターとして、DataHandler クラスのインスタンスを渡すことができることはわかっていますが、思ったほどではありません。私の考えでは、同じクラス内にあるため、データ(この場合は)を単独で読み取る必要があります。これを行うためのきれいな方法はありますか?posYGetXGetYposXposYMap

編集:

MapクラスのインスタンスをFileHandlerコンストラクターに渡すことができたので、その親クラス、つまりデータにアクセスする方法がありますが、問題を解決する良い方法ではないことは理解しています。したがって、構造を変更しても問題はありません。何か問題があることは理解しています。そうしないと、この問題は発生しませんが、変更方法がわかりません。何か提案があれば、遠慮なく書き込んでください。

文脈をよりよく説明するためだけに。さまざまなデータ (x、y、高さ、幅、名前など)、それを説明するいくつかの画像 (たとえば、地形の高さの RGB 画像など) で構成されるマップがあります。クラス) といくつかの設定ファイル。これらのファイルの 1 つに、マップ データの一部が書き込まれている必要があります。そこで、データ、画像、ファイルを扱う3つのクラスを親に持つMapクラスを考えたのですが、この問題が発生したので、良い構造ではないと思います。

4

2 に答える 2

0

If you strongly against changing structure (but it is recommended way) I suggest you refactor DataHandler and FileHandler - implement it as Singleton, so in any line of your code you can access it as via DataHandler.Instance.GetX() and FileHandler.Instance.SomeMethod().

Basic implementation of singleton is:

class DataHandler
{
    private DataHandler() {}
    public GetX() { ... }

    private static DataHandler instance = null;

    public static Instance
    {
        get
        {
            if (instance == null)
            {
                return (instance = new DataHandler());
            }
        }
    }
}

UPD: My sample is not thread-safe.

于 2013-05-22T14:35:19.333 に答える