1

我有一个函数被代码的另一部分调用,带有签名:

public override bool DoSomething(Foo f, out string failed)
{
    failed = "I failed";
    _anotherClassMethodExpectingString.SetString(failed);
}

所以我的问题是 - 如果我需要向另一个类方法发送我的调用者在其“out”参数中期望的相同字符串,我可以只发送相同的变量,而不会对我的调用者产生任何影响吗?“out”参数让我有点困惑..我应该使用这样的东西吗:

public override bool DoSomething(Foo f, out string failed)
{
   string localStr = "I failed";
   failed = localStr;
   _anotherClassMethodExpectingString.SetString(localStr);
}
4

4 回答 4

2

除非您调用的后续方法也使用 out 参数,否则无需定义局部变量。该字符串将不受任何常规参数传递的影响。

于 2013-01-29T18:02:33.803 回答
1

如果您不希望或不希望您的方法的调用者看到第三种方法的任何更改,那么您所拥有的一切都很好。如果我正确阅读了您的问题,这似乎是您的意图。

如果您希望调用者反映由第三种方法引入的更改,则它也需要是一个out参数,或者通过返回值返回修改,然后您将在返回之前将其分配给原始 out 参数。

于 2013-01-29T18:02:11.083 回答
0

ref如果为不带or的方法声明参数out,则该参数可以具有与其关联的值。该值可以在方法中更改,但是当控制权返回给调用过程时,更改后的值将不会保留。

鉴于字符串在 .NET 中是不可变的,因此可以安全地传递failed给没有字符串参数的任何方法,refout确保它不会被更改。

于 2013-01-29T18:17:10.160 回答
0

out 参数类似于 c++ 中对象的指针。因此,如果您不使用 'out' 定义器,则不会更改参数的值。

于 2013-01-29T18:21:54.280 回答