zoukankan      html  css  js  c++  java
  • 基础才是重中之重~值类型与引用类型作为参数传递的不同表现

    参数传递根据参数类型分为按值传递和按引用传递,默认情况下都是按值传递的,如果希望按引用传递可以在参数前加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

  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/lori/p/2334166.html
Copyright © 2011-2022 走看看