C#中out 和ref区别

1. ref传参前,必须对参数初始化

2. out传参前,可以不对参数初始化。但是需注意以下几点:

1) 即使初始化了,在被调用函数内直接使用该参数也会产生编译错误:“使用了未赋值的out参数”;看了CLR via C#后,知道了“被调用的方法不能读取参数的值”

2) 在被调用的函数内部必须对out参数赋值,如果没有对out参数做任何操作,那么也会引起编译错误:“控制离开当前方法之前必须对out参数赋值”。看了CLR via C#后,知道了“且被调用的方法必须在返回之前为对象赋值”

3. out和ref传参时,必须保证参数数据类型完全一致,即使继承关系的父子类进行传参也会编译出错(如“参数1无法从”ref string”转换为”ref object””)。

4. 属性和索引器不是变量,因此不能作为 out或ref 参数传递。因为这是引用传递,属性和索引器都没得引用(个人理解)。

posted on 2009-11-23 09:00  onlyfew  阅读(399)  评论(0编辑  收藏  举报

导航