-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>>>

如果您将 a 传递RefHolder<string>给另一个组件,您可以稍后更改它的ptr值,然后该组件可以访问您的新string.

于 2013-11-07T17:08:13.783 回答