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

我们仍需记住: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!

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

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

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

C#——传值参数(3)的更多相关文章

  1. C#——传值参数(2)

    //我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 这次与大家共同学习C#中的 ...

  2. C#——传值参数(1)

    //我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 这次与大家一起学习C#中的值 ...

  3. PCL智能指针疑云 <三> 智能指针作为函数的传值参数和传引用参数

    一 函数的参数传递可以简单分类为“传值”和“传引用”. 声明函数时,形参带引用“&”,则函数调用时,是把实参所在的内存直接传给函数所开辟的栈内存.在函数内对形参的修改相当于对实参也进行修改. ...

  4. Mybatis框架中Mapper文件传值参数获取。【Mybatis】

    1.参数个数为1个(string或者int) dao层方法为以下两种: /** * 单个int型 */ public List<UserComment> findByDepartmentI ...

  5. asp.net MVC4在Action间跳转 RedirectToAction 传值参数问题

    return RedirectToAction("Test", new { cw = cw, firstdirectoryid = firstdirectoryid }); 上式中 ...

  6. 用AJAX传值参数是中文时可能会乱码

    1.ajax代码 function SelectSemesterBySchYear() { // alert('sssssss'); var temp1 = document.getElementBy ...

  7. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

  8. Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数

    这里主要讨论Delphi中函数.方法的相关内容. 一.工程文件 { Delphi语法方法和函数 1.方法 2.函数 } program Routine; {$APPTYPE CONSOLE} uses ...

  9. C++基础知识面试精选100题系列(11-20题)[C++ basics]

    [原文链接] http://www.cnblogs.com/hellogiser/p/100-interview-questions-of-cplusplus-basics-11-20.html [题 ...

随机推荐

  1. c++中的基本知识点

    1 class和struct的区别和联系 在c++中,class和struct只有一点不同,它们是可以完全替代使用的.唯一的不同在于,class中的成员默认是private的,而struct中默认是p ...

  2. Oracle数据库基础--存储过程和函数

    一.存储过程和函数 存储过程: 对一个模块的封装 函数: 功能与存储过程几乎一样 区别: 函数必须通过return 关键字返回一个值 存储过程: 不需要return返回值 参数: 输入型参数 输出型参 ...

  3. linux 下ftp的安装配置 图文教程

    0.安装ftp的前置条件是关掉SElinux # vi /etc/selinux/config 修改 SELINUX=” disabled ” ,重启服务器.若相同,则跳过此步骤. 1. 可先查看是否 ...

  4. 3D立方体旋转动画

    在线演示 本地下载

  5. <ReversingEngineering>关于windows32位系统下的dll注入技术经验汇

    上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...

  6. 51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 1084 矩阵取数问题 V2  基准时间限制:2 秒 空 ...

  7. Starting MySQL.. ERROR! The server quit without updating PID file

    版权声明:本文为博主原创文章,未经博主允许不得转载. 注意:本文出自 “阿飞”的博客 ,如果要转载本文章,请与作者联系! 并注明来源: http://blog.csdn.net/faye0412/ar ...

  8. BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1673 题意: 有n个砝码(n <= 1000),重量为w[i]. 你要从中选择一些砝 ...

  9. kettle脚本定时任务不执行

    问题描述:在centos机器上部署了kettle脚本,每天定时跑一次,但是并没有成功跑,手动执行命令是可以的.而且写了一个测试的shell脚本也是可以执行的. 解决方案: 将2的错误输出,/usr/l ...

  10. zepto.fullpage

    内容来自:颜海镜 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...