'Ref'和'Out'参数的内存分配,有什么区别?

时间:2018-07-21 15:38:26

标签: c# ref out

在C#中,使用refout关键字。

它如何影响内存管理? refout关键字的内存管理有什么区别吗?

1 个答案:

答案 0 :(得分:7)

即使幕后使用的机制相同,但两个关键字之间的区别在于编译器必须对每个参数进行验证:

  • 如果您使用ref关键字传递参数,则编译器会在调用之前 检查您是否已初始化了该参数
  • 如果您通过关键字out传递参数,则编译器将在退出前检查您调用的方法是否已对相应的参数进行了赋值。

此差异允许使用out var construct, which has been added to C# 7.0。由于初始化要求,单独使用ref可能无法使用此功能。

就内存管理而言,两者之间没有区别:在两种情况下,引用本身都是通过值传递的,而使用引用的代码会增加额外的解除引用级别。