ref和out的作用和区别

相同点:方法的定义和调用都必须显示使用ref、out关键字。都会导致参数按引用传递。

不同点:传递给ref关键字的参数必须赋初始值,而out不用。out关键字会清空变量,即使变量已经赋值也不行,退出函数时所有out引用个变量都要赋值。

 

说明:ref的应用场景是内部对外部的值进行改变,而out则是内部对外部变量赋值。out一般用在函数有多个返回值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace aaa
{
    class Program
    {
        static void Main(string[] args)
        {
            int age = 22;//传递给ref定义参数的方法,所以必须赋初始值。
            A a = new A();
            a.GetStr(ref age);
            Console.WriteLine(age.ToString());//导致参数按引用传递,所以目标函数会直接更改这个数字。
            int year;传递给out定义参数的方法,不需要赋初始值。
            a.GetTest(out year);
            Console.WriteLine(year.ToString());//导致参数按引用传递,所以目标函数会直接更改这个数字。
            Console.Read();
        }
    }
    public class A
    {
        public void GetStr(ref int i)
        {
            i = 0;//ref修饰,可以修改也可以不改。
        }
        public void GetTest(out int i)
        {
            i = 100;//out修饰,必须在退出此方法前为out修饰的变量i赋值。
        }
    }
}

需要指出的是:
1、当我们频繁传递大型参数的时候,比如说DataTable、DataSet...的时候,会节省好多内存资源。
2、当我们想得到方法多样化的处理结果的时候,而我们又不愿意复杂化方法所返回的结果,那么我们可以在方法里定义多个ref 或者 out,以期得到丰富的结果。比如说,我们调用一个方法,要同时得到string、int、double、bool、Array...等几种不同类型的结果,而return返回object又很复杂的时候,ref 和out的处理效果,看上去将会是多么的赏心悦目...

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值