一晃大学四年要过去了,期间乱点了很多技能点, 导致每一项技能都只是处于入门阶段。为了将C#作为我的主要技能,准备恶补相关姿势(知识),通过各种技术论坛的推荐,找到了《C#图解教程》这本书。初一看,感觉只不过都只是把知识罗列了出来而已,而且很多都是已知的,但是看到后面,发现它把很多以前模糊不清的知识变得清晰了,而且还学到了以前都没有学到的新知识。特别结合图片的解释,让初学者更加容易理解。

不多说,这次想将本书第五章方法有关参数相关知识进行梳理。

1、参数知识点

参数类型有值参数、引用参数、输出参数、参数数组这么四种。上面的都是位置参数,另外C#还提供了命名参数和可选参数(和python极其类似)。

2、值参数

使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。方法调用的时候,做了如下的操作:

1、在栈中为形参分配空间

2、讲实参的值复制给形参

我们来举一个例子,看代码:

结果如下:

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

一句话说:如果方法内部对参数做了赋值操作(引用类型内部成员赋值),跳出方法后,值类型参数还是不变,引用类型参数值会发生改变。

3、引用参数

使用引用参数,需要这两点

1、必须在方法的声明和调用中都使用def修饰符;

2、实参必须是变量,在用作实参之前必须被赋值。如果是引用类型变量,可以赋值一个引用或null。

对于值参数而言,系统会在栈上为形参分配内存。而引用参数会具有以下这两个特点

1、不会为形参在栈上分配内存空间;

2、形参的参数名将作为实参的别名,指向相同的内存位置。

我们来举一个例子,看代码:

结果如下:

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

一句话说:如果方法内部对参数做了赋值操作,跳出方法后,值类型参数和引用类型参数值都会发生改变。

3、引用类型作为值参数和引用参数

之前看到两个例子,引用类型作为值参数和引用参数结果都会发生改变。但是要注意一点的是,他们改变的都是引用类型内部成员的值。

现在我们来看看,如果对引用类型本身赋值一个新对象会发生什么。我想通过上面两幅图应该也很容易知道了。

下面代码展示引用类型作为值参数传递:

结果如下:

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

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

结果如下:

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

总结:本质来说值参数实际就将实参在栈上复制了一份给形参,方法内部对形参做操作,执行方法后,会在栈上自动销毁,而实参不受影响。而引用参数则是相当于实参的别名,方法内部对实参做操作,执行方法后,实参受影响。

C#图解教程-方法参数笔记(上)的更多相关文章

  1. 《C#图解教程》读书笔记之三:方法

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头—指定方法的特征,方法体—可执行代码的语句序列: (2)方法的调用:参 ...

  2. 《C#图解教程》读书笔记之四:类和继承

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.万物之宗:Object (1)除了特殊的Object类,其他所有类都是派生类,即使他们没有显示基类定义. ( ...

  3. 《C#图解教程》读书笔记之五:委托和事件

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执 ...

  4. 《C#图解教程》读书笔记之六:接口和转换

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...

  5. 《C#图解教程》读书笔记之二:存储、类型和变量

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.类型初窥:掀起你的盖头来 (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声 ...

  6. 《C#图解教程》读书笔记之一:C#和.NET框架

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...

  7. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  8. win8.1系统的安装方法详细图解教程

    win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...

  9. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

随机推荐

  1. ERP库位分布看板(库位管理)

    客户正在使用的看板管理,根据厂家需求,做的二次开发. 一:看板效果 二:客户需求 1.客户需求:XX是一家汽车零部件(胶管,硅胶管等)的生产厂家,因此对原料,半成品的有效期有严格的要求. 多次调研得知 ...

  2. GridView应用随笔

    1. 数据绑定 GridView可以使用数据源控件和设置控件的DataSource属性来绑定数据,这里主要讲设置DataSource属性来绑定. 1.写一个返回值为DataSet或者DataTable ...

  3. MySQL Sniffer

    MySQL Sniffer 是360开源的一个基于 MySQL 协议的抓包工具, 能实时抓取客户端端请求,并格式化输出操作语句,操作十分简单.对于问题的定位,操作的审核是个不错的利器. Github地 ...

  4. jenkins配置邮箱服务器(126邮箱)

    安装Email Extension Plugin 安装过程容易失败,多试几次 一.开启126邮件的SMTP获取授权码 二.配置管理员邮件地址   三.设置邮件通知 四.点击Test Configura ...

  5. Servlet中过滤器的执行流程

  6. SEO-发信息注意的问题

    SEO是什么? SEO的全称是Search Engine Optimization,翻译过来就是搜索引擎优化,说到搜索引擎,可能不是特别的清楚.通俗点讲,就是百度,谷歌,雅虎,这些可以直接搜索到你想要 ...

  7. "the hypervisor is not running" 故障

    在我们日常服务器管理中,常常会遇到创建虚拟机,如果在一台新部署的 Hyper-V 上新建一个 Virtual Machine 时,出现错误信息:"The virtual machine co ...

  8. Linux下httpd服务与Apache服务的查看和启动

    转:http://jingyan.baidu.com/article/63f236282d43170209ab3d43.html 这里简要介绍Linux环境中Apache也就是httpd服务的启动,查 ...

  9. Java虚拟机工作原理

    Java虚拟机工作原理 首先我想从宏观上介绍一下Java虚拟机的工作原理.从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac ...

  10. 解决在eclipse中写ImageView时有警告的问题

    Eclipse中写了一个android程序其中main.xml中ImageView哪行是个黄叹号!不知道为什么? 解决办法: android:contentDescription="@str ...