参数

参数分为形参和实参

形参

形参的英文是:Formal Parameter ,通常叫实参,形式参数。

形参是写在方法声明括号内的特殊局部变量,而非写在方法函数体内部。

如下函数名后面的括号里面的两个变量,就是形参了。学过C语言的读者应该对这个形参的概念不陌生。

// x、y 是两个形参
public void PrintArea(int x, float y )
{
}
Code language: C# (cs)
  1. 具备数据类型与变量名,可读可写;
  2. 定义位置在方法体外,方法执行前自动完成初始化out 输出参数除外);
  3. 多参数用逗号分隔,参数数量无限制;
  4. 在方法体内使用方式和普通的局部变量完全一致。

也就是形参,其实就是特殊的局部变量,它是用来接收调用函数的地方传入的值,也就是它的赋值是发生在函数调用的时候,当执行流程进入到函数内部的时候,形参的值已经赋值完毕了。

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)

调用方法时,用来给形参赋值的变量 / 表达式称为实参;方法执行前,会用实参的值初始化对应形参。

  1. 实参写在方法调用的括号内;
  2. 类型匹配要求:实参类型必须和对应形参一致,或编译器支持隐式类型转换
  3. 位置对应:默认按顺序一一匹配(位置参数 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 会编译报错,需要手动强制转换。

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注