- 方法的结构
方法是一块具有名称的代码。可以使用方法的名称从别的地方执行代码,也可以把数据传入方法并接受数据输出。
方法是类的函数成员。方法有两个主要部分,方法头和方法体。
方法头指定方法的特征,包括:
★ 方法是否返回数据,如果返回,返回什么类型;
★ 方法的名称;
★ 哪种类型的数据可以传递给方法或从方法返回,以及应如何处理这些数据。
方法体内部的代码执行
方法体是一个块,是大括号括起的语句序列。块可以包含以下项目:
★ 本地变量;
★ 控制流结构;
★ 方法调用;
★ 内嵌的块。
本地变量
和字段一样,本地变量也保存数据。字段通常保存和对象状态有关的数据,而创建本地变量经常是保存本地或临时的计算数据。
本地变量的存在性和生存期仅限于创建它的块及其内嵌的块。
★ 它从声明它的那一点开始存在。
★ 它在块完成执行时结束存在。
可以在方法体内任意位置声明本地变量,但必须在使用它们前声明。
类型推断和var关键字
var关键字并不是特定类型变量的符号。它只是句法上的速记,表示任何可以从初始化语句的右边推断出的类型。使用显式类型名的代码片段和使用var关键字的代码片段在语义上是等价的。
使用var关键字有一些重要的条件:
★ 只能用于本地变量,不能用于字段;
★ 只能在变量声明中包含初始化时使用;
一旦编译器推断出变量的类型,它就是固定且不能更改的。var关键字并不改变C#的强类型性质,且不会损失效率。
在C和C++中,可以先声明一个本地变量,然后在嵌套块中声明另一个相同名称的本地变量。在内部范围,内部名称掩盖了外部名称。然而,在C#中不管嵌套的级别如何,都不能在第一个名称的有效范围内声明另一个同名的本地变量。本地常量
参数
★值参数,使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。方法被调用时,系统做如下操作。
在栈中为形参分配空间。
将实参的值复制给形参。
注意:值类型和值参数是两个完全不同的概念。值类型就是指类型本身包含其值,值参数是把实参的值复制给形参。
★引用参数
使用引用参数时,必须在方法的声明和调用中都使用ref修饰符。
实参必须是变量,在用作实参前必须被赋值。如果是引用类型变量,可以赋值为一个引用或null。
在之前的内容中我们已经认识到了,对于值参数,系统在栈上为形参分配内存,相反,引用参数具有以下特征。
不会为形参在栈上分配内存。
实际情况是,形参的参数名将作为实参变量的别名,指向相同的内存位置。
由于形参名和实参名的行为就好像指向相同的内存位置,所以在方法的执行过程中对形参作用的任何改变在方法完成后依然有效(表现在实参变量上)。引用类型作为值参数和引用参数
- 递归
除了调用其他方法,方法也可以调用自身。这叫做递归。
递归会产生很优雅的代码,调用方法自身的机制和调用其他方法其实是完全一样的。都是为每一次方法调用把新的栈桢压入栈顶。随着递归越来越深,栈也越来越大。
第5章 方法
最新推荐文章于 2023-05-27 22:15:07 发布