C# 方法(局部函数和参数)

本章内容:

方法的结构

方法体内部的代码执行

局部变量

局部常量

控制流

方法调用

返回值

返回语句和void方法

局部函数

参数

值参数

引用参数

引用类型作为值参数和引用参数

输出参数

参数数组

参数类型总结

方法重载

命名参数

可选参数

栈帧

递归

局部函数

正如刚刚所解释的,方法块内的代码可以调用另一个方法。如果另一个方法在同一个类内,

可以直接使用它的名称并传入所需的参数(参见下一节)进行调用。如果另一个方法在不同的

类中,必须通过这个类的一个对象实例调用它。另一个类中的方法必须使用public访问修饰符

声明。

从C#7.0开始,你可以在一个方法中声明另一个单独的方法。这样可以将嵌人的方法跟其他

代码隔离开来,所以它只能在包含它的方法内调用。如果使用恰当,这可以使代码更清晰,更易

于维护。这些嵌人的方法被称为局部函数。

与局部变量必须在使用之前进行声明不同,你可在包含方法的任意位置声明局部函数。

下面的代码演示了一个MethodWithLoca1Function方法,它包含了一个局部函数,叫作

MyLocalFunction。

复制代码
class Program
{
    public void MethodWithLocalFunction()
    {
        int MyLocalFunction(int Z1)   //声明局部函数
        {
            return Z1*5;
        }

        int results=MyLocalFunction(5);//调用局部函数
        Console.WriteLine($"Results of local function call:{results}");
    }

    static void Main(string[] args)
    {
        Program myPorgram=new Program();
        myPorgram.MethodWithLocalFunction();//调用方法
    }
}

输出结果:

复制代码
Results of local function call:25

参数

形参是局部变量,它声明在方法的参数列表中,而不是在方法体中。

下面的方法头展示了参数声明的语法。它声明了两个形参:一个是int型,另一个是float型。

因为形参是变量,所以它们有类型和名称,并能被写人和读取。

和方法中的其他局部变量不同,参数在方法体的外面定义并在方法开始之前初始化(但

有一种类型例外,称为输出参数,我们将很快谈到它)。

参数列表中可以有任意数目的形参声明,而且声明必须用逗号隔开。

形参在整个方法体内使用,在大部分地方就像其他局部变量一样。例如,下面的PrintSum

的声明使用两个形参×和y,以及一个局部变量sum,它们都是int型。

复制代码
public void PrintSum(int x,int y)
{
    int sum=x+y;
    Console.WriteLine($"Newsflash:{x}+{y} is {sum}");
}

实参

当代码调用一个方法时,形参的值必须在方法的代码开始执行之前初始化。用于初始化形参

的表达式或变量称作实参(actual parameter,有时也称argument)。

实参位于方法调用的参数列表中。

每一个实参必须与对应形参的类型相匹配,或是编译器必须能够把实参隐式转换为那个

类型。第17章会解释类型转换的细节。

例如,下面的代码展示了方法PrintSum的调用,它有两个int类型的实参。

例如,下面的代码展示了方法PrintSum的调用,它有两个int类型的实参。

当方法被调用的时候,每个实参的值都被用于初始化相应的形参,方法体随后被执行。图6-6

阐明了实参和形参的关系。

注意在之前那段示例代码及图6-6中,实参的数量必须和形参的数量一致,并且每个实参的

类型也必须和所对应的形参类型一致。这种形式的参数叫作位置参数。稍后会看其他的一些选项,

现在先来看看位置参数。

位置参数示例

在如下代码中,MyClass类声明了两个方法------ 一个方法接受两个整数并返回它们的和,另

一个方法接受两个并返回它们的平均值。对于第二次调用,注意编译器把int值5和somelnt

式转换成了float类型。

复制代码
class MyClass 
{
    public int Sum(int x,int y)  //声明方法
    {
        return x+y;              //返回和
    }


    public float Avg(float input1,float input2)  //声明方法
    {
        return (input1+input2)/2.0F;             //返回平均值
    }
}


class Program
{
    static void Main()
    {
        MyClass myT=new MyClass();
        int someInt=6;


        Console.WriteLine
        ("Newsflash:Sum:{0} and {1} is {2}",
              5,someInt,myT.Sum(5,someInt));  //调用方法

        Console.WriteLine("Newsflash:Avg:{0} and {1} is {2}",
                              5,someInt,myT.Avg(5,someInt));  //调用方法
    }
}

输出结果

复制代码
Newsflash:Sum 5 and 6 is 11
Newsflash:Avg 5 and 6 is 5.5
相关推荐
组合缺一1 小时前
Solon AI 开发学习16 - generate - 生成模型(图、音、视)
java·人工智能·学习·ai·llm·solon
谷哥的小弟1 小时前
Spring Framework源码解析——AnnotationAwareOrderComparator
java·后端·spring·源码
八月瓜科技1 小时前
八月瓜科技参与“数据要素驱动产业升级”活动,分享【数据赋能科技创新全链条】
java·大数据·人工智能·科技·机器人·程序员创富
谷哥的小弟1 小时前
Spring Framework源码解析——StringUtils
java·后端·spring·源码
G_whang1 小时前
win10环境下jdk17下载安装及环境配置
java
非情剑2 小时前
Java-Executor线程池配置-案例2
android·java·开发语言
小张快跑。2 小时前
【Java企业级开发】(十)SpringBoot框架+项目实践
java·数据库·spring boot
夏小花花2 小时前
<editor> 组件设置样式不生效问题
java·前端·vue.js·xss
weixin_307779132 小时前
Jenkins Ioncions API 插件:现代化图标库在持续集成中的应用
java·运维·开发语言·前端·jenkins
AnAnCode2 小时前
【时间轮算法】时间轮算法的详细讲解,从基本原理到 Java 中的具体实现
java·开发语言·算法·时间轮算法