参数分为形参和实参
形参
形参的英文是:Formal Parameter ,通常叫实参,形式参数。
形参是写在方法声明括号内的特殊局部变量,而非写在方法函数体内部。
如下函数名后面的括号里面的两个变量,就是形参了。学过C语言的读者应该对这个形参的概念不陌生。
// x、y 是两个形参
public void PrintArea(int x, float y )
{
}
Code language: C# (cs)
- 具备数据类型与变量名,可读可写;
- 定义位置在方法体外,方法执行前自动完成初始化(
out输出参数除外); - 多参数用逗号分隔,参数数量无限制;
- 在方法体内使用方式和普通的局部变量完全一致。
也就是形参,其实就是特殊的局部变量,它是用来接收调用函数的地方传入的值,也就是它的赋值是发生在函数调用的时候,当执行流程进入到函数内部的时候,形参的值已经赋值完毕了。
public void PrintArea( int x, float y )
{
float area = x * y; // x、y 为形参,area 为普通局部变量 用来保存x和y的乘积
Console.WriteLine($"计算面积: { x } * { y } is { sum }");
}
Code language: C# (cs)
可运行例子
class Program
{
static void Main()
{
Program program = new Program();
program.PrintArea(10,6.5F);
}
public void PrintArea(int x, float y)
{
float area = x * y; // x、y 为形参,area 为普通局部变量 用来保存x和y的乘积
Console.WriteLine($"计算面积: {x} * {y} is {area}");
}
}Code language: C# (cs)
输出
计算面积: 10 * 6.5 is 65
调用函数的时候,就相当于把x的值初始化为10,y的值初始化为6.5
6.5F后面的F表示这是一个float类型的单精度浮点数,如果不带F后缀,编译器会认为它是一个double类型,会报错的。
单精度float和双精度double,它们存储的时候,内存中占的位数是不同的,所以它们可以存储的数据的精确度是不一样的。
所谓精确度就是一个类型可以存储的数据,的小数位数最大支持几位,如果超出了,就可能不准确。这和内存中存储的位数有关系。

x和y是形参。调用的时候
相当于给两个局部变量初始化成这两个值。
int x = 10;
float y = 6.5F;Code language: C# (cs)
注意:
形参的格式,类型,顺序等和方法名组成了方法的签名,所谓签名就是这个函数的身份证的概念。签名我们后面会学习,签名是否一样决定了这个方法是否一样,后面还会学习到函数的重载。
实参
英文叫:Actual Parameters(实参 / 实际参数,又称 arguments)
调用方法时,用来给形参赋值的变量 / 表达式称为实参;方法执行前,会用实参的值初始化对应形参。
- 实参写在方法调用的括号内;
- 类型匹配要求:实参类型必须和对应形参一致,或编译器支持隐式类型转换;
- 位置对应:默认按顺序一一匹配(位置参数 positional parameters)。
int someInt = 6;
PrintSum(5, someInt);
// 5 是常量表达式实参,someInt 是变量实参
// 顺序对应:5 → x,someInt → y
Code language: JavaScript (javascript)
图示逻辑:调用时实参的值复制给对应位置的形参,之后执行方法体代码。
位置参数
class MyClass
{
// 两个int形参
public int Sum(int x, int y)
{
return x + y;
}
// 两个float形参
public float Avg(float input1, float input2)
{
return (input1 + input2) / 2.0F;
}
}
class Program
{
static void Main()
{
MyClass myT = new MyClass();
int someInt = 6;
// Sum:实参int匹配形参int
Console.WriteLine("Newsflash: Sum: {0} and {1} is {2}",
5, someInt, myT.Sum(5, someInt));
// Avg:int实参隐式转换为float形参
Console.WriteLine("Newsflash: Avg: {0} and {1} is {2}",
5, someInt, myT.Avg(5, someInt));
}
}
Code language: PHP (php)
输出结果
Newsflash: Sum: 5 and 6 is 11
Newsflash: Avg: 5 and 6 is 5.5
Code language: HTTP (http)
💡 关键知识点:C# 支持窄类型向宽类型隐式转换(int → float),反向 float → int 会编译报错,需要手动强制转换。