基础才是重中之重~值类型与引用类型作为参数传递的不同表现

参数传递根据参数类型分为按值传递和按引用传递,默认情况下都是按值传递的,如果希望按引用传递可以在参数前加ref或者out,今天我们主要说一个按传递中的

值传递和引用类型参数的按值传递。

值类型实例传递的是该值类型实例的一个拷贝,因此被调用方法操作的是属于自己本身的实例拷贝,因此不影响原来调用方法中的实例值。

引用类型传递的是对象的引用地址,在方法内操作对象时,原对象实例也会发生改变(其实方法内与方法外是同一对象)。

具体看代码:

class Order
   {
       public Order()
       {
           this.User = new User { UserID = -1, UserName = "匿名" };
       }
       public int price = 10;
       public List<OrderDetail> OrderDetail { get; set; }
       public User User { get; set; }
   }
   class User
   {
       public int UserID { get; set; }
       public string UserName { get; set; }
   }
   class OrderDetail
   {
       public int ProductID { get; set; }
       public string Name { get; set; }
       public decimal Cost { get; set; }
   }

/// <summary>
       /// 引用类型作为参数,传递的是地址,会影响原值
       /// </summary>
       /// <param name="abf"></param>
       private static void RefRef(Order abf)
       {
           abf.price = 20;
           Console.WriteLine(abf.price);
       }
       /// <summary>
       /// string类型作为参数,不会影响原值
       /// </summary>
       /// <param name="aStr"></param>
       static void RefStr(string aStr)
       {
           aStr = "Changing String";
           Console.WriteLine(aStr);
       }
       /// <summary>
       /// 引用类型中的引用类型作为参数,传递的是地址,会影响原值
       /// </summary>
       /// <param name="order"></param>
       static void RefInRef(Order order)
       {
           order.User.UserName = "zzl";
           Console.WriteLine(order.User.UserName);
       }
       /// <summary>
       /// 值类型作为参数,不会影响原值
       /// </summary>
       /// <param name="i"></param>
       private static void RefValue(int i)
       {
           i = i + 10;
           Console.WriteLine(i);
       }

 

           //引用类型作为参数传递
           Order abf = new Order();
           RefRef(abf);
           Console.WriteLine(abf.price);
           //(string)引用类型作为参数传递
           string str = "Old String";
           RefStr(str);
           Console.WriteLine(str);

           //引用类型中的引用类型
           Order order = new Order();
           RefInRef(order);
           Console.WriteLine(order.User.UserName);

           //值类型作为参数传递
           int a = 10;
           RefValue(a);
           Console.WriteLine(a);

结果:

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值