我理解"out"和"ref"类型很像,只是"out"变量不需要初始化。除此之外,还有其他用途吗?有时我会在回调方法中看到它们的使用,但我从来没有理解它们实际上是如何工作的,以及为什么我们需要它们而不是全局级别的"ref"变量。
我理解"out"和"ref"类型很像,只是"out"变量不需要初始化。除此之外,还有其他用途吗?有时我会在回调方法中看到它们的使用,但我从来没有理解它们实际上是如何工作的,以及为什么我们需要它们而不是全局级别的"ref"变量。
out
参数通过明确指定被调用函数(被调用方)将对其进行初始化,从而强制执行调用方和被调用方之间的合同。另一方面,当使用ref
参数时,我们只知道被调用方可能会修改它们,但初始化责任在调用方。
其中一个最大的例子是TryParse方法,您想要能够检查是否可以转换,通常如果可以转换,您希望得到转换后的值。否则,它只是将对象传回调用方法的另一种方式。
为什么你会希望在调用方法中初始化一些变量,而没有保证被调用的方法如果正常完成会覆盖这个变量呢?这就是out
参数给你带来的好处。
基本上,我认为out
参数是“哎呀,我需要返回多个值”的指示器。我个人更喜欢使用元组,但当然它们只出现在.NET 4中...并且没有明确的语言支持,使用起来比理想情况下稍微有点麻烦。
有两个主要的区别