存储引用变量(引用到引用) 在C++中,我会使用**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(); } }

存储引用变量(引用到引用) 在C++中,我会使用**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(); } },c#,reference,C#,Reference,请注意,此代码不起作用,并且vars的类型不正确。。。我只是不知道要做到这一点需要什么样的类型… 所以我们需要的是有一个DataObj a,call Init,它加载并在以后的某个时候调用函数MyCBFunc。此时应填写A。在C++中,我会绕过**var,然后可以被引用,并正确设置填充变量。 那么,有没有一种方法可以将a传递到Load中,签名上应该包含什么类型,以及Param中的DataObj obj声明允许将其作为引用传递 这是托管C# 您通过(您永远猜不到这一点)存储引用变量。。。。使用引用

请注意,此代码不起作用,并且vars的类型不正确。。。我只是不知道要做到这一点需要什么样的类型…

所以我们需要的是有一个DataObj a,call Init,它加载并在以后的某个时候调用函数MyCBFunc。此时应填写A。在C++中,我会绕过**var,然后可以被引用,并正确设置填充变量。

那么,有没有一种方法可以将a传递到Load中,签名上应该包含什么类型,以及Param中的DataObj obj声明允许将其作为引用传递


这是托管C#

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

class RefHolder<T>
{
    public T ptr;
}
class RefHolder
{
公共T-ptr;
}
现在,您可以全天使用多个间接寻址:

RefHolder<RefHolder<RefHolder<string>>>
RefHolder

如果您将
RefHolder
传递给另一个组件,您可以稍后更改它的
ptr
值,然后该组件可以访问新的
字符串

您的目标是什么(您描述的机制除外)?你想要完成的是什么?你在用一个解决问题的方法来打击我们,并问我们如何使它发挥作用;告诉我们您试图解决的实际问题,我们将用C#演示如何解决。并非所有C++思维都会直接映射到C语言,你的问题还不清楚。你说的是
ref
关键字吗?你可以在这里使用
ref
关键字,但这不是好的做法。为什么不直接返回
o
的值并设置它呢?或者传入一个修改值的闭包。有很多替代解决方案。似乎您也希望使用函数指针,因此我建议您查找Func、Action和谓词委托。@RobertHarvey-如果不清楚,我很抱歉,我想知道的是,C#是否有用于存储指向指针的指针的语法,或者用C#作为引用的更好措辞。如果没有几个级别的线程,ref关键字可以工作。当你必须等待某件事情发生时,无论是文件加载还是WWW请求返回,程序都不能等待,但是当它返回时,我需要设置该变量,但是将该变量传递到不同级别是不起作用的,除了接受答案的情况。只是试图把我的C++知识映射到C…你的解决方案比我的要优雅得多。。。实际上我刚刚宣布了一个非常具体的ptr。但是回到实际问题上来,除了这个“hack”之外,C#没有提供任何类型/转换来实现这一点?我不知道框架提供了强引用类,尽管大小为1的数组也可以这样做,如果您不需要自定义类型。其他策略包括传递包含访问值的lambda的Func(对属性有用)或者在不安全的{}中使用实际指针。这个答案可能是个更好的主意。@Alex:在很多情况下,需要两个
Func
对象(一个用于读取,一个用于写入),lambda只是创建一个helper类来保存变量。但是它更强大(例如,与您提到的属性setter和getter兼容)。@BenVoigt:您完全正确,尽管我让它创建helper类比自己创建要好。