一、什么是方法
方法是一块具有名称的代码,可以使用方法名调用方法,也可以把数据传入或传出方法。
方法的结构主要包括方法头(返回值类型、方法名、参数列表)和方法体包含如下:
返回值
方法名称
方法的参数列表
方法体
方法体是一个块,块可以包含以下项目:
本地变量:声明在方法体里的变量
控制流结构:例如分支、循环等
方法调用:在方法里可以调用其他别的方法
内嵌的块:块里包含另一个块
二、本地变量与本地常量
本地变量和字段的区别
本地变量在方法里,字段在类里方法外
var关键字
var关键字是语法的速记,表示任何可以从初始化语句的右边推断出的类型。
void Method01()
{
//预定义类型
int a1 = 10;
var a2 = 10;//编译器可推断出10为int类型
//用户自定义类型
MyClass mc1 = new MyClass();
var mc1 = new MyClass();
}
var关键字的重要使用条件
只能用于本地变量,不能用于字段
只能在变量声明并且初始化的时候使用
一旦编译器推断出变量的类型,它就是固定且不能修改的
本地常量
本地常量特征:
常量在声明时必须初始化
常量在声明后不能改变
格式:
生命周期:
声明在方法体或代码块中,并在声明它的块结束的地方失效。
三、方法调用的流程
从一个方法中调用另外一个方法时:
当前方法的执行在调用点被挂起
控制转移到被调用方法的开始
被调用方法执行直到完成
控制回到发起调用的方法
四、参数
参数就是方法中允许传入和返回值的特殊变量。
形参
形参是本地变量,它声明在方法的参数列表中,而不是在方法体中,必须在方法的代码执行前被初始化。
格式举例:
注意点:
形参是变量,有类型有名称,能被读取和写入
和本地变量不同,参数在方法体外定义并在方法开始之前初始化(除了输出参数)
参数列表中可以有任意数目形参声明,用逗号隔开
实参
用于初始化形参的表达式或变量称作实参。
格式举例:
注意点:
实参位于调用方法时的参数列表中。
每一个实参必须与对应的形参类型相匹配或兼容。
值参数
值参数通过把实参的值复制到形参的方式把数据传递给方法。(一种传递参数值的方式)
代码示例:
图解示例:
引用参数
引用参数将会把形参名作为实参的别名,指向相同的内存位置。(一种传递参数值的方式)
使用引用参数注意点:
必须在方法的声明和调用中都使用ref修饰符
实参必须是变量,在用作实参前必须被赋值。如果为引用类型变量,可以赋值为一个引用或null
代码示例:
图解示例:
引用类型用作值参数和引用参数
引用类型用作值参数
将引用类型作为值参数传递。如果在方法内创建一个新的对象并赋值给形参,将会切断实参与形参之间的关联,并且在方法调用结束之后,新对象也将不复存在。
代码示例:
图解示例:
引用类型用作引用参数
将引用类型作为引用参数传递。如果在方法内创建一个新对象并赋值给形参,在方法结束后该对象依然存在,并且是实参所引用的值。
代码示例:
图解示例:
输出参数
输出参数用于从方法体内把数据传出到调用代码。(输出参数也相当于实参的别名)
格式参考:
必须在声明和调用中都使用修饰符out
实参必须是变量,而不能是其他类型的表达式,是因为方法需要内存保存返回值
注意点:
在方法内部,输出参数在能够被读取之前必须被赋值。
在方法返回之前,必须为所有输出参数进行一次赋值。
代码示例:
图解示例:
参数数组
参数数组允许0个或多个实参对应一个特殊的形参。
格式参考:
重点:
在一个参数列表中只能有一个参数数组。
如果存在其他参数,参数数组必须在参数列表最后一个。
在声明时需要有修饰符params,在调用时不能有该修饰符
两种调用方式
延伸式:使用逗号分割的该数据类型元素的列表。所有元素必须时方法声明中指定的类型。
编译器创建一个一维数组,复制参数列表中的值到该数组中。
一个该数据类型元素的一维数组
编译器使用用户自己创建的数组。
值类型和引用类型的数组参数
数组参数是值类型,那么值被复制,实参不会受方法内部影响。
数组参数是引用类型,那么引用被复制,实参会受方法内部影响。
代码示例:
图解示例:
参数类型总结
五、方法重载
一个类中拥有多个相同名称的方法就叫方法的重载(method overload)。
方法重载要求:
方法名相同
参数列表不同(参数类型、个数、不同类型的参数顺序、参数的修饰符)【注意不包含形参名】
与返回值无关!!!
(注:本章学习总结自《C#图解教程》)