• C#——传值参数(3)


    上篇文章我与大家共同学习了 值参数——引用类型
    这次与大家共同学习 传值参数--引用类型,不创建新对象,只操作对象
    这是个思维导图:

    我们仍需记住:1.值参数创建变量的副本 2.对值参数的改变不会影响变量的值
    看一个例子:

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Student stu = new Student() { Name = "Elliot" };
     6             Console.WriteLine("Name is {0},  HashCode is {1}", stu.Name, stu.GetHashCode());
     7             UpdateObject(stu);
     8             //调用方法后我们再打印一遍
     9             Console.WriteLine("Name is {0},  HashCode is {1}", stu.Name, stu.GetHashCode());
    10             
    11         }
    12 
    13         //没有创建新对象
    14         static void UpdateObject(Student stu)
    15         {
    16             stu.Name = "Mark";  
    17             Console.WriteLine("Name is {0},  HashCode is {1}",stu.Name,stu.GetHashCode());
    18         }
    19     }
    20 
    21     class Student
    22     {
    23         public string Name { get; set; }
    24     }
    25 }


    运行结果:


    看:
    第一行是我们在Main方法里创建一个对象后立即打印出他的名字和hashcode;
    第二行则是UpdateObject方法里打印的;
    第三行则是在调用完方法后又打印了一遍
    发现后两行是完全一样的
    解释:
    引用类型的变量存储的是对象在堆内存中的地址,传进来的参数是变量的一个副本,所以它们都存储的是对象的地址,我们通过参数访问了对象,修改了对象里的值,由于变量和参数都指向的是同一个对象,所以它们的名字就变得一样,而hashcode一直一样。

    对象还是那个对象,但对象里的值改变了
    这就是我们用值参数只更新对象而不创建新对象
    注意:
    在现实工作中,像这样通过传进来的参数改变对象里的值的情况是少见的,因为方法主要输出还是靠返回值,我们把这种通过传进来的参数改变对象里的值的操作叫做某个方法的副作用(side-effect),工作中要尽量避免这种副作用。

    ------------------------------------------------------------------------------------------------

    To be continued!

    下篇与大家共同学习 引用参数

    ------------------------------------------------------------------------------------------------

    希望大家积极评论,指出我的问题所在,共同交流,共同进步!

  • 相关阅读:
    redis配置文件参数说明及命令操作
    在Window 下安装Redis数据库
    eclipse怎样在线安装hibernate tools插件并使用
    eclipse如何优化构建的速度(Building)
    java实现敏感词过滤(DFA算法)
    eclipse编码格式设置
    Jquery Ajax简单封装(集中错误、请求loading处理)
    Vue简单封装axios—解决post请求后端接收不到参数问题
    vue项目实现记住密码功能
    vue路由的两种模式配置以及history模式下面后端如何配置
  • 原文地址:https://www.cnblogs.com/GeekDragon/p/6341671.html
Copyright © 2020-2023  润新知