-1

C++ では、これを行うために Type ** var を使用します。これはC#でどのように達成されますか? 何が起こっているかの例を次に示します。これはかなり大まかな擬似コードです...

Class Main{
    class DataObj {...};

    class Param
    {
        public DataObj obj;
        public CBFunc f;

    }

    // Start a load, DataObj o should be set once the load is complete
    void Load(string fn, DataObj o, CBFunc func)
    {
        Param p = new Param();
        p.obj = o;
        p.f = func;

        // will call the CBFunc when done...
        LoadWithCB(fn, CBFunc, p);
    }

    void CBFunc(Param p, DataObject o)
    {
        // DataObj o is what was loaded.  p.obj is set to o...
        p.obj = o;
        p.f();
    }


    DataObj A;

    void Init()
    {
        Load("...",A, MyCBFunc);
    }

    void MyCBFunc()
    {
        //A now is filled out
        A.whatever();
    }
 }

このコードは機能せず、vars の入力が正しくないことに注意してください...これを達成するためにどのような型が必要かわかりません...

したがって、必要なのは DataObj A を持ち、Init を呼び出してロードし、後で関数 MyCBFunc を呼び出すことです。この時点で、A に記入する必要があります。C++ では、**var を渡して参照解除し、変数を正しく設定して正しく設定することができます。

A を Load に渡す方法はありますか? また、署名に必要な型と、これを参照として渡すことを可能にする Param の DataObj obj の宣言は何ですか?

これはマネージ C# にあります。

4

1 に答える 1

2

参照型のクラス メンバー変数を使用して、参照変数を格納します (これを推測することはできません)。

class RefHolder<T>
{
    public T ptr;
}

これで、一日中複数の間接化を使用できます。

RefHolder<RefHolder<RefHolder<string>>>

RefHolder<string>を別のコンポーネントに渡すptrと、後でその値を変更でき、コンポーネントは新しい にアクセスできますstring

于 2013-11-07T17:08:13.783 に答える