C#——传值参数(3)
2024-08-26 09:03:30
上篇文章我与大家共同学习了 值参数——引用类型
这次与大家共同学习 传值参数--引用类型,不创建新对象,只操作对象
这是个思维导图:
我们仍需记住: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!
下篇与大家共同学习 引用参数
------------------------------------------------------------------------------------------------
希望大家积极评论,指出我的问题所在,共同交流,共同进步!
最新文章
- Spring事务管理的三种方式
- 跨站请求伪造 CSRF / XSRF<;一:介绍>;
- NSOperation操作依赖和监听
- 利用Dreamweaver配置PHP服务器的站点
- mysql概要(七)表字段管理,字段的增删改
- python Django 学习笔记(三)—— 模版的使用
- BZOJ3258: 秘密任务
- attempt to write a readonly database 的解决办法
- Spring Security(18)——Jsp标签
- IOS开发-UI学习-delegate(代理)的使用,键盘消失
- ASP.NET Core 开源论坛项目 NETCoreBBS
- git实用攻略(二)
- Redis 持久化和配置文件
- 什么是“闭包”(closure)为什么要用它?
- JDK安装与环境配置——学习JAVA的准备工作
- 联想拯救者r720+固态浦科特M8PeGN 的bios 设置
- linux-Centos 7下bond与vlan技术的结合
- Mysql 性能优化6【重要】 索引优化
- [ASP.NET]使用Layer简介
- 详解C#泛型(三)