代码之家  ›  专栏  ›  技术社区  ›  LegendLength

“ref”关键字和AppDomain

  •  7
  • LegendLength  · 技术社区  · 17 年前

    当我开始使用C时,我不确定引用是如何被正确地处理的(是否通过值等传递)。我错误地认为在传递将被调用方法修改的对象时需要“ref”关键字。

    然后在读了像 this ,我意识到只有在需要更改实际引用/指针本身时才需要“ref”。

    但是今天我在通过远程调用传递参数时遇到了一个问题,实际上需要引用来修改对象的内容。在没有引用的情况下传递时,对象返回时保持不变。我被告知要添加ref关键字,但我坚持了一段时间,只有在您更改指针本身时才有必要添加,而不是更改指向的内容。

    我搜索过网络,只能找到一个 single page 简单讨论一下。这是一个已知的问题吗?是否有人能够指出有关它的一些文档?在我看来,对于通过远程调用修改的任何参数,现在都必须使用ref。

    2 回复  |  直到 17 年前
        1
  •  4
  •   user8032    17 年前

    添加“ref”可能有帮助,也可能没有帮助。这一切都取决于特定的封送拆收器实现的智能性。例如,如果您调用一个Web服务,那么任何数量的“ref”都不会对您有所帮助——函数的参数不会通过网络发送回来。唯一从服务返回的是函数的返回值。在处理远程处理时,您必须理解(至少在某种程度上)实际工作的方式——参数需要通过某种“连接”序列化并发送到被调用方,在另一端进行反序列化,工作由服务器执行,结果序列化并发送回您。这些结果是否包括对您首先传递的参数的更改,更多地取决于具体的远程处理实现,然后取决于您为修饰参数而添加的“ref”……

        2
  •  1
  •   Anzurio    17 年前

    我想知道你为什么说“参考/指针”?这些条件有很大的不同。看,指针只是一个地址,比如int。

    另一方面,引用只是某个对象的别名。在C++方面:

    int x;
    int& y = x;
    

    从这里开始,无论X发生什么,Y和Viceversa发生什么,它们都是“永远”的。

    同样,在C++中,通过ReF:

    void foo(int& y);
    int main(){
        int x = 0;
        foo(x);
    }
    

    这意味着y只是foo范围内x的另一个名称(别名)。这就是REF在C中的含义。