存储引用变量(参考参考)

时间:2013-11-07 17:04:13

标签: c# reference

在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#中。

1 个答案:

答案 0 :(得分:2)

您存储引用变量(您永远不会猜到这一点)....使用引用类型的类成员变量。

class RefHolder<T>
{
    public T ptr;
}

现在你可以整天使用多个间接:

RefHolder<RefHolder<RefHolder<string>>>

如果您将RefHolder<string>传递给其他组件,则可以稍后更改其ptr值,然后该组件可以访问您的新string