C#高级参数之ref

今天来写一个交换值的方法函数

		//未使用ref参数
		static void Main(string[] args)
        {
            int a = 10, b = 5;
            Console.WriteLine("调用方法前:a={0},b={1}", a, b);
            TextRef(a, b);
            Console.WriteLine("调用方法后:a={0},b={1}", a, b);
            Console.ReadKey();
        }
        public static void TextRef(int r1, int r2)
        {
            int temp = r1;
            r1 = r2;
            r2 = temp;
        }

在这里插入图片描述
????what????为什么没有交换呐???
这就需要学习到高级参数ref,全称: reference

原因分析:代码中int是值类型,所创建的实例不在托管堆中分配内存地址,我们通过方法函数只不过是将数据复制过来,在方法调用结束后并不会对Mian中的数据进行任何修改。

使用ref试试:

		//使用ref参数
		static void Main(string[] args)
        {
            int a = 10, b = 5;//对参数进行赋值
            Console.WriteLine("调用方法前:a={0},b={1}", a, b);
            TextRef(ref a,ref b);//调用方法时在参数前加ref
            Console.WriteLine("调用方法后:a={0},b={1}", a, b);
            Console.ReadKey();
        }
        public static void TextRef(ref int r1, ref int r2)//传入参数前要给参数赋值 ★和out参数进行对比★
        {
            int temp = r1;
            r1 = r2;
            r2 = temp;
        }

在这里插入图片描述效果实现,能够达到我们想要的交换值得目的。

原因分析:ref参数修饰变量的传递方式是引用传递,是对参数的地址进行改变,就像C中的指针一样,直接能够对原数进行操作,而不是对原数的那个Copy值进行操作。
一句话总结:在方法中对参数所做的任何更改都将反映到该变量上。

拓展:
实参和形参对应ref这么麻烦为什么我们要一一对应?尝试实参或者形参中不写ref参数结果又会如何?程序会出现异常还是能够正常编译?调用方法前为对参数赋值又会出现什么问题?

拓展①:形参中不使用ref参数在这里插入图片描述
实参中不使用ref参数
在这里插入图片描述
拓展②:调用方法前未对参数赋值
在这里插入图片描述
总结:

  1. 调用方法时必须加ref关键字(参考拓展①)
  2. 传入参数前必修给参数赋值(参考拓展②)

每天进步一点点,奥利给。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AuCl.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值