【C#图解教程】第六章 方法(下)

输出参数

函数的输出只有返回值有时不太够,此时需要用到输出参数,用修饰词out声明
输出参数的要求与引用参数类似,需要是变量,此外,输出参数也是实参的别名,指向堆中同一对象。

【C#图解教程】第六章 方法(下)_第1张图片

输出参数与引用参数的不同在于,在方法内部给输出参数赋值后才能读取它,且返回前必须在所有路径都为输出参数赋值。

【C#图解教程】第六章 方法(下)_第2张图片

【C#图解教程】第六章 方法(下)_第3张图片

C#7.0之后,可以不必预先声明变量作为输出参数了,如:

【C#图解教程】第六章 方法(下)_第4张图片

参数数组

参数数组允许同一类型的零个或多个实参对应一个形参,使用参数数组需要注意的点如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvJC1dS8-1685616286904)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6aad29a1-fd67-4cb1-8a68-e7d47fdcc040/Untitled.png)]

参数数组的声明方法:

【C#图解教程】第六章 方法(下)_第5张图片

方法调用

使用参数数组的方式有两种:

【C#图解教程】第六章 方法(下)_第6张图片
这说明我们在调用参数数组时不需要使用修饰符params,这里与其他参数类型有些区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eEFcNgBL-1685616286906)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9df352c4-dc67-4a56-b874-873401fa309f/Untitled.png)]

而参数数组在声明时需要使用修饰符,调用时不允许有修饰符
在使用参数列表时,编译器的动作是:

【C#图解教程】第六章 方法(下)_第7张图片

直接将数组作为实参时,编译器会使用你的数组而不是创建新的。

参数类型总结

【C#图解教程】第六章 方法(下)_第8张图片

方法重载

一个类中的同名方法称为方法重载,这些同名方法必须有不同的“签名”:

【C#图解教程】第六章 方法(下)_第9张图片

命名参数

位置参数根据形参与实参的位置匹配,不使用位置参数的话,还可以使用类似字典形式的命名参数:

【C#图解教程】第六章 方法(下)_第10张图片

当代码调用了多次时,使用命名参数有助于代码的阅读

可选参数

意思是当我们在设定形参时可以指定形参的默认值,然后在加载实参时可以不加载该形参对应的实参

【C#图解教程】第六章 方法(下)_第11张图片

但也并不是所有的参数都可以作为可选参数:

【C#图解教程】第六章 方法(下)_第12张图片

所有类型的形参的声明顺序遵循以下原则:

【C#图解教程】第六章 方法(下)_第13张图片

栈帧

在调用方法时,内存从栈顶开始分配,保存和方法关联的一些数据项,这块内存就是栈帧

【C#图解教程】第六章 方法(下)_第14张图片
【C#图解教程】第六章 方法(下)_第15张图片

递归

递归是方法调用自己,为每一次方法调用把新的栈帧压入栈顶。
【C#图解教程】第六章 方法(下)_第16张图片
【C#图解教程】第六章 方法(下)_第17张图片

你可能感兴趣的:(C#图解教程,c#,开发语言,c++,游戏引擎,游戏程序)