https://yutuo.net/archives/5e98cb8b74d6363b.htmlhtml
在C#中,我常常用到ref
和out
这两个关键字,但对其区别也还不是很清楚。函数
基本上来讲,C#函数参数的传递方法为分两种,一种转值,另外一种是传址。对于不加任何修饰的函数参数来讲,它都是传值的。传值又分为两种,一种是传对象值,另外一种是传地址值。对于值类型System.ValueType
(包括这两种struct
和enum
,C#中的int
、double
等基本类型都是struct
)来讲是传对象值,对于其它对象来讲是传地址值。.net
在加了修饰ref
和out
以后,函数参数就是传址的。虽然二者都是传址参数,但二者仍是有区别的,用最简单的一句说来讲:ref
是能进能出,out
是能出不能用。就是说ref
是能够把值传入函数里,而且能够输出函数外,因此它主要用于函数内部须要对外部值进行修改的时候;out
不能把值传入函数,只能作为输出,它主要用于函数须要返回多个值的时候。code
要注意的有如下两点:htm
ref
型参数时,在调用函数前必须初始化(设置过值);使用out
型参数时,必须在函数内对其初始化(设值)。ref
或out
时,函数的定义和调用函数时,参数前都要加ref
或out
关键字。