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 ...
随机推荐
- Array对象方法属性总结
属性主要有三个:constructor;length;prototype; constructor(英文意思:构造器):返回对创建此对象的数组函数的引用.例如:var arr=new Array(); ...
- TypeScript设计模式之门面、适配器
看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...
- express 4
http://www.expressjs.com.cn/4x/api.html#app中间件 路由 模板 跨域 json cookie session
- KoaHub平台基于Node.js开发的Koa的连接MongoDB插件代码详情
koa-mongo MongoDB middleware for koa, support connection pool. koa-mongo koa-mongo is a mongodb midd ...
- 3385: [Usaco2004 Nov]Lake Counting 数池塘
3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 22 Solved: 21 ...
- [.net 面向对象程序设计深入](26)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)
[.net 面向对象程序设计深入](26)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...
- spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)
在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...
- servlet中的过滤器 国际化
1. 过滤器 基本概念 过滤器是需要在xml中配置的. 为什么需用到过滤器? 项目开发中,经常会涉及到重复代码的实现! 注册 ----à Servlet [1. 设置编码] ----à JSP 修改 ...
- 【学习笔记】TCP通信的细节及TCP连接对HTTP事务处理性能影响
从三次握手的细节说起 刚开始尝试使用java等后端语言写IO流,或用套接字(socket)实现简单C/S通信的同学们,常常会接触到的一个概念:就是所谓的"三次握手",socket作 ...
- python终端中退格键,方向键不能使用
在安装Python的时候先安装 yum install readline-devel.x86_64 -y 如果python已经安装过了就重新安装 ./configure make all mak ...