Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# - Fatal编程技术网

C# 为什么我们需要“我们需要什么?”;“出去”;参数?

C# 为什么我们需要“我们需要什么?”;“出去”;参数?,c#,C#,我知道“out”和“ref”类型一样,只是out变量不需要初始化。“out”参数还有其他用途吗?有时我看到它们在回调方法中的使用,但我始终不明白它们实际上是如何工作的,或者为什么我们需要它们而不是全局级别的ref变量?out参数通过显式指定被调用方将初始化它们来强制调用方和被调用方(正在调用的函数)之间的约定。另一方面,当使用ref参数时,我们只知道被调用方可以修改它们,但调用方有责任对它们进行初始化。最大的例子之一是TryParse方法,您希望能够检查某些东西是否可以转换,通常如果可以转换,您

我知道“out”和“ref”类型一样,只是out变量不需要初始化。“out”参数还有其他用途吗?有时我看到它们在回调方法中的使用,但我始终不明白它们实际上是如何工作的,或者为什么我们需要它们而不是全局级别的ref变量?

out
参数通过显式指定被调用方将初始化它们来强制调用方和被调用方(正在调用的函数)之间的约定。另一方面,当使用
ref
参数时,我们只知道被调用方可以修改它们,但调用方有责任对它们进行初始化。

最大的例子之一是TryParse方法,您希望能够检查某些东西是否可以转换,通常如果可以转换,您需要转换后的值。否则,这只是将对象传递回调用方法的另一种方式。

如果方法正常完成,您为什么要在调用方法中初始化某些内容,而不保证被调用方法本身会覆盖变量?这些是
out
参数给您带来的好处


基本上,我认为
out
参数是“oops,我需要返回多个值”指标。我更喜欢自己使用元组,但当然他们只在.NET4中使用。。。而且,如果没有明确的语言支持,它们的使用也会比理想的稍显笨拙。

2主要区别在于

  • 与ref不同,它不希望初始化变量
  • 使用OUT时,被调用函数负责为非被调用方赋值