C#值类型和引用类型的参数传递(ref,out)实例分析

(ref,out)

​
​
​
​
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyBlog
{

     class REFOUTTO
    {
        public void Add(int a)
        {
            Console.WriteLine("Add:" + a);
        }
        public void Add1(ref int a)
        {
            a = a + 5;
            Console.WriteLine("Add1:"+a);
        }
        public void Add2(out int a)
        {
            a = 20 ;
            Console.WriteLine("Add2:"+a);
        }
    }
  class Program
    {
        static void Main(string[] args)
        {
             int a=10;
             REFOUTTO valueParms = new REFOUTTO();

            
            valueParms.Add(5); //5  Main 方法里面的a= 10不会随着方法的结果而改变
            Console.WriteLine("Main" + a);//10   Main 方法里的属性(int a=10)

            valueParms.Add1(ref a);//15 ref传值时必须在传参前赋值所以此处保留了a的初始值(int a=10) 引用了Add1的方法里的赋值(a=a+5)a=10(int a=10)+5 即使方法里没有赋值返回的也是初始值(a=10)
            Console.WriteLine("Main" + a);//15  实际上把a的地址传进来了会把方法里得到的结果(a=15)带给Main方法里的属性(实参)

            valueParms.Add2(out a); //20  参数out不接受外部的数据(把外部的地址传进来),在内部进行初始化,并把方法的结果(a=20)返回带给实参 所以out传参必须在返回前赋值
            Console.WriteLine("Main" + a);//20
            Console.ReadKey();
        }    
     } 

​

​

​

​

总结:

ref:

1,使用ref必须在参数声明和调用的时候都带上ref关键字

2,只能修饰变量,不能修饰常量

3,ref在方法中可以对ref修饰的值不改变,但是在传参前必须给参数赋值,所以在传递过程中保留了初始值,一般都是把外部的值传入到方法中使用并修改

4,ref的特点侧重于改变和修改值

out:

1,out在传参前不必给参数赋值,但是在返回前必须给参数赋值,一般都是传递变量进入某个方法中接收数据

2,out在传参过程中不保留初始值

2,out的特点侧重于输出

共同点:

ref和out都是把值传递改为引用传递,传递值类型的变量的地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值