我理解“out”就像“ref”类型,除了out变量不必初始化。 “out”参数还有其他用途吗?有时候我会在回调方法中看到它们的使用,但我从来不知道它们是如何工作的,或者为什么我们需要它们而不是全局级ref变量?
答案 0 :(得分:14)
out
参数通过显式指定被调用者将初始化它们来强制调用者和被调用者(被调用的函数)之间的契约。另一方面,当使用ref
参数时,我们所知道的是被调用者可以修改它们,但是调用者有责任初始化它们。
答案 1 :(得分:3)
最大的一个例子是TryParse方法,您希望能够检查是否可以转换某些内容,并且通常如果可以转换它,则需要转换后的值。否则它只是另一种将对象传递回调用方法的方法。
答案 2 :(得分:3)
为什么你要在调用方法中初始化一些东西,并不保证如果方法正常完成,被调用的方法本身会覆盖变量?这些是out
参数给您带来的好处。
基本上我认为out
参数为“oops,我需要返回多个值”指标。我更喜欢自己使用元组,但当然它们只是将它变成了.NET 4 ...而且如果没有明确的语言支持,它们使用起来也会比理想情况稍微尴尬。
答案 3 :(得分:0)
有两个主要差异