C#图解教程-方法参数笔记(上)
一晃大学四年要过去了,期间乱点了很多技能点, 导致每一项技能都只是处于入门阶段。为了将C#作为我的主要技能,准备恶补相关姿势(知识),通过各种技术论坛的推荐,找到了《C#图解教程》这本书。初一看,感觉只不过都只是把知识罗列了出来而已,而且很多都是已知的,但是看到后面,发现它把很多以前模糊不清的知识变得清晰了,而且还学到了以前都没有学到的新知识。特别结合图片的解释,让初学者更加容易理解。
不多说,这次想将本书第五章方法有关参数相关知识进行梳理。
1、参数知识点
参数类型有值参数、引用参数、输出参数、参数数组这么四种。上面的都是位置参数,另外C#还提供了命名参数和可选参数(和python极其类似)。
2、值参数
使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。方法调用的时候,做了如下的操作:
1、在栈中为形参分配空间
2、讲实参的值复制给形参
我们来举一个例子,看代码:

结果如下:

好了,我们用图解的形式来解释下,它是如何在堆栈中执行的:

一句话说:如果方法内部对参数做了赋值操作(引用类型内部成员赋值),跳出方法后,值类型参数还是不变,引用类型参数值会发生改变。
3、引用参数
使用引用参数,需要这两点:
1、必须在方法的声明和调用中都使用def修饰符;
2、实参必须是变量,在用作实参之前必须被赋值。如果是引用类型变量,可以赋值一个引用或null。
对于值参数而言,系统会在栈上为形参分配内存。而引用参数会具有以下这两个特点:
1、不会为形参在栈上分配内存空间;
2、形参的参数名将作为实参的别名,指向相同的内存位置。
我们来举一个例子,看代码:

结果如下:

好了,我们用图解的形式来解释下,它是如何在堆栈中执行的:

一句话说:如果方法内部对参数做了赋值操作,跳出方法后,值类型参数和引用类型参数值都会发生改变。
3、引用类型作为值参数和引用参数
之前看到两个例子,引用类型作为值参数和引用参数结果都会发生改变。但是要注意一点的是,他们改变的都是引用类型内部成员的值。
现在我们来看看,如果对引用类型本身赋值一个新对象会发生什么。我想通过上面两幅图应该也很容易知道了。
下面代码展示引用类型作为值参数传递:


结果如下:

好了,我们用图解的形式来解释下,它是如何在堆栈中执行的:

下面代码展示引用类型作为引用参数传递(只加了ref):

结果如下:

好了,我们用图解的形式来解释下,它是如何在堆栈中执行的:

总结:本质来说值参数实际就将实参在栈上复制了一份给形参,方法内部对形参做操作,执行方法后,会在栈上自动销毁,而实参不受影响。而引用参数则是相当于实参的别名,方法内部对实参做操作,执行方法后,实参受影响。
C#图解教程-方法参数笔记(上)的更多相关文章
- 《C#图解教程》读书笔记之三:方法
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头—指定方法的特征,方法体—可执行代码的语句序列: (2)方法的调用:参 ...
- 《C#图解教程》读书笔记之四:类和继承
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.万物之宗:Object (1)除了特殊的Object类,其他所有类都是派生类,即使他们没有显示基类定义. ( ...
- 《C#图解教程》读书笔记之五:委托和事件
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执 ...
- 《C#图解教程》读书笔记之六:接口和转换
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...
- 《C#图解教程》读书笔记之二:存储、类型和变量
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.类型初窥:掀起你的盖头来 (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声 ...
- 《C#图解教程》读书笔记之一:C#和.NET框架
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- win8.1系统的安装方法详细图解教程
win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
随机推荐
- 《Shell脚本学习指南》学习笔记之变量、判断和流程控制
变量 定义变量 可以使用export和readonly来设置变量,export用于修改或打印环境变量,readonly则使得变量不得修改.语法: export name[=word] ... read ...
- Asp.Net Core Authentication Middleware And Generate Token
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- KoaHub平台基于Node.js开发的Koa JWT认证插件代码信息详情
koa-jwt Koa JWT authentication middleware. koa-jwt Koa middleware that validates JSON Web Tokens and ...
- UINavigationBar统一修改导航条样式
#pragma mark -- 统一导航条样式 //统一导航条样式 UIFont *font = [UIFont systemFontOfSize:19.f]; NSDictionary *textA ...
- ubuntu Error mounting /dev/sda6 at /media/xxx...
问题原因:可能是windows没有完全关机,详细请看我的另一博文: http://www.cnblogs.com/ediszhao/p/3794459.html 为了学习linux我装了双系统,因为我 ...
- oracle表空间创建
/*分为四步 *//*第1步:创建临时表空间 */create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9 ...
- fastjson过滤不需要的属性
以下是一个通用的对象转json的方法,使用的fastjson的SimplePropertyPreFilter 对象,个人感觉比使用PropertyPreFilter的匿名内部类形式的过滤器更好用!直接 ...
- Java中的函数对象
初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...
- [原创]HBase学习笔记(3)- Java程序访问HBase
这里介绍使用java api来访问和操作HBase,例如create.delete.select.update等操作. 1.HBase配置 配置HBase使用的zookeeper集群地址和端口. pr ...
- java学习笔记 --- 面向对象3
一.创建对象是做了些什么事情? 图解: 二.static关键字 (1)静态的意思.可以修饰成员变量和成员方法. (2)静态的特点: 1.静态是随着类的加载就加载了.也是随着类的消失而消失了. 2.静态 ...