Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';参考';关键字和应用程序域_C#_Remoting - Fatal编程技术网

C# ';参考';关键字和应用程序域

C# ';参考';关键字和应用程序域,c#,remoting,C#,Remoting,当我开始使用C#时,我不确定引用到底是如何处理的(它们是否通过值传递等)。我错误地认为在传递被调用方法修改的对象时需要'ref'关键字 然后在阅读了类似这样的线程之后,我意识到只有在需要更改实际引用/指针本身时才需要“ref” 但是今天,我在通过远程调用传递参数时遇到了一个问题,实际上需要ref来修改对象的内容。当在没有ref的情况下传递时,对象返回时保持不变。我被告知要添加ref关键字,但我争论了一会儿,认为只有在更改指针本身时才有必要添加ref关键字,而不是更改指向的内容 我在网上搜索了一下

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

然后在阅读了类似这样的线程之后,我意识到只有在需要更改实际引用/指针本身时才需要“ref”

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

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

我想知道你为什么说“reference/pointer”?。这些术语之间有很大的区别。看,指针只是一个地址,比如说int

另一方面,引用只是某事物的别名。就C++而言:

int x;
int& y = x;
从现在起,无论发生在x、y和维切维萨身上的是什么,他们都注定“永远”

再次,在C++中,通过RIF:

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

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

添加“ref”可能有帮助,也可能没有帮助。这完全取决于特定marshaller实现的智能性。例如,如果您调用一个web服务,那么再多的“ref”也帮不了您——函数的参数不会通过线路发送回来。从服务返回的唯一内容是函数的返回值。在处理远程处理时,您必须了解(至少在某种程度上)实际工作的方式——参数需要序列化并通过某种“线路”发送给被调用方,在另一端反序列化,工作由服务器执行,结果序列化并发送回您。这些结果是否包括对您首先传递的参数的更改更多地取决于特定的远程处理实现,然后取决于您为修饰参数而添加的“ref”…

我非常确定SOAP(asmx)和WCF web服务都会像您预期的那样处理“ref”,通过在两个方向上编组它。这是ref的意思,但不是reference的意思。我认为把C++引入混合中会混淆事物,因为C++引用与C引用是不一样的。我说“引用/指针”比“引用”更突出我所说的实际引用而不是引用引用的对象。我认为这可能有助于避免人们不得不重复读这句话。