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


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

  • 相关阅读:
    浅析Vue Router中关于路由守卫的应用以及在全局导航守卫中检查元字段
    react-native 项目配置ts运行环境
    #mobx应用在rn项目中
    react-native TextInput输入框输入时关键字高亮
    react-native-亲测可用插件
    nodejs+express实现图片上传
    cordova图片上传,视频上传(上传多个图片,多个视频)
    cordova图片上传,视频上传(上传单个图片,单个视频)
    移动端如何测试(前端,cordova)
    在mac上将apk包安装到android手机上
  • 原文地址:https://www.cnblogs.com/lori/p/2334166.html
Copyright © 2020-2023  润新知