作者:kcz1596369 | 来源:互联网 | 2023-02-07 12:06
我现在正在努力理解当它表示使用'out'关键字我们能够返回多个值时它意味着什么.例如,来自msdn网站(https://msdn.microsoft.com/en-us/library/ee332485.aspx):"......以下示例使用out来通过单个方法调用返回三个变量."
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
我不确定我是不是只是没有正确阅读说明,但似乎Method()实际上并没有返回(不使用'return'关键字)任何东西并基本上分配字段(类似地通过传递通过ref).这与其他来源一致,他们声明使用'out'可以返回 多个值.我是否误解了返回词的背景,或者是否是我不能正确理解这个概念的东西?
1> Jurjen..:
正确地注意到该方法确实没有返回值.无论ref
和out
工作,引用.
ref
会让编译器知道变量在进入函数之前已经初始化了(当你在该函数之前使用变量并希望现在改变某些东西时,这很有用).out
将让编译器知道对象是在它调用的函数内初始化的.所以ref
两种方式out
都是有效的.
所以,是的,它实际上并没有返回一些东西.但另一方面,它会为您的变量赋值,通过这些变量,您的调用方法也会以新值结束.基本上你可以看到这是一个回报.
简而言之:
ref
参数 - 这些参数与C++参考参数具有相同的功能
out
参数 - 这些允许从方法传回数据,但不允许传递给方法.
我还建议你阅读这个SO答案以及关于参数传递的Jon Skeet 的相应博客.它将为您提供有关该概念的大量信息.而作为乔恩斯基特指出,使用时要小心ref
和out
:
它基本上是一种获得另一个返回值的方法,通常应该被准确地避免,因为这意味着该方法可能试图做太多.
@xanatos我改写它以使其更清楚.谢谢你指出来!