0

Info画面にテキストを表示するグラフィック コントロール クラスを作成しています。テキストはオブジェクトの文字列です。Infoクラスのインスタンス内からそのオブジェクトの最新の値を取得できるようにしたいと考えています。

class Info
{
    public string Text;
}

void Program()
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info();
    wind1.Text = obj.name; // this just copies current value, but should be a reference or something 

    /* obj.name value changes several times before it's time to display it again */

    // Info window drawing method
    foreach (var item in Windows) // Windows is List<Info>
    Draw(item.Text); // this doesn't get the latest value
}

描画セクション内から最新の文字列値を取得できるようにするには、コードをどのように変更すればよいですか?

4

1 に答える 1

3

更新:どのタイプでも機能するものが必要な場合は、デリゲートを使用する必要があります。例えば:

class Info
{
    private Func<string> getText;

    public Info(Func<string> getText)
    {
        getText = getText;
    }

    public string Text
    {
        get
        {
            return getText();
        }
    }
}

void Program
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info(() => obj.name);

    // Now do your stuff.
}

この場合、文字列を返す無名関数Infoが与えられます。そのプロパティにアクセスすると、関数が評価されてその文字列が取得されます。文字列がどのように取得され、どこから取得されるかは、クライアントコード(つまりメソッド)によって決まります。このように、特定のタイプに依存しません。TextProgramInfo


ClassAオブジェクトをインスタンスに渡して、オブジェクトがそれ自体Infoの値を取得できるようにすることができます.name

このようなもの、おそらく?

class Info
{
    public Info(ClassA obj)
    {
        TheObject = obj;
    }

    public ClassA TheObject
    {
        get;
        set;
    }

    public string Text
    {
        get
        {
            return TheObject.name;
        }
    }
}

void Program
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info(obj);

    // Now do your stuff.
}
于 2012-08-25T19:19:51.667 に答える