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

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

     class Program
{
static void Main(string[] args)
{
Student stu = new Student() { Name = "Elliot" };
Console.WriteLine("Name is {0}, HashCode is {1}", stu.Name, stu.GetHashCode());
UpdateObject(stu);
//调用方法后我们再打印一遍
Console.WriteLine("Name is {0}, HashCode is {1}", stu.Name, stu.GetHashCode()); } //没有创建新对象
static void UpdateObject(Student stu)
{
stu.Name = "Mark";
Console.WriteLine("Name is {0}, HashCode is {1}",stu.Name,stu.GetHashCode());
}
} class Student
{
public string Name { get; set; }
}
}

运行结果:


看:
第一行是我们在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. AWS:4.VPC

    主要介绍 1.Amazon混合云 2.将EC2加入VPC 3.VPC经典场景 4.VPC安全保障 Amazon混合云 : 在公有云的基础上创建私有云 VPC概念 VPC(VPC Virtual Pri ...

  2. LeetCode——Binary Tree Postorder Traversal

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  3. Spring Boot 支持多种外部配置方式

    Spring Boot 支持多种外部配置方式 http://blog.csdn.net/isea533/article/details/50281151 这些方式优先级如下: 命令行参数 来自java ...

  4. (转)CentOS 5.5 64bit 编译安装Adobe FlashMediaServer 3.5

    http://download.macromedia.com/pub/flashmediaserver/updates/4_0_2/Linux_32bit/FlashMediaServer4.tar. ...

  5. windows下安装Qt

    1.Linux下安装Qt与MySQL相对来说比较容易,在这里我就不多加介绍. 接下来主要介绍windows下安装Qt与MySQL. 2.在windows,我安装QtCreator, 使用的是qt-wi ...

  6. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '88888888' for key 'PRIMARY'

    严重: Servlet.service() for servlet jsp threw exceptioncom.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityC ...

  7. zabbix api支持的数据类型

    bool flag integer float string timestamp array object query countOutput editable excludeSearch filte ...

  8. BZOJ 1634 [Usaco2007 Jan]Protecting the Flowers 护花:贪心【局部分析法】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1634 题意: 约翰留下他的N只奶牛上山采木.可是,当他回来的时候,他看到了一幕惨剧:牛们正 ...

  9. JavaScript(3)

    var a=90; switch(a){ case "890": window.alert("ok"); break; case 90: window.aler ...

  10. 存储过程IF --ELSE IF -- END IF 使用

    CREATE OR REPLACE PROCEDURE BJPJYXK_HF_SD( sqid_p IN VARCHAR2,--申请单ID xkbh_p IN VARCHAR2,--新生成的许可证编号 ...