当前位置: 首页 > backend >正文

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型。

image
因为形参是变量,所以它们有类型和名称,并能被写人和读取。
和方法中的其他局部变量不同,参数在方法体的外面定义并在方法开始之前初始化(但
有一种类型例外,称为输出参数,我们将很快谈到它)。
参数列表中可以有任意数目的形参声明,而且声明必须用逗号隔开。

形参在整个方法体内使用,在大部分地方就像其他局部变量一样。例如,下面的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类型的实参。

image
当方法被调用的时候,每个实参的值都被用于初始化相应的形参,方法体随后被执行。图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));  //调用方法}
}

image
输出结果

Newsflash:Sum 5 and 6 is 11
Newsflash:Avg 5 and 6 is 5.5
http://www.xdnf.cn/news/4057.html

相关文章:

  • [前端]异步请求的竞态问题
  • 代码随想录第34天:动态规划7(打家劫舍问题:链式、环式、树式房屋)
  • STA中的multi_cycle 和false_path详细讨论
  • macOS 上是否有类似 WinRAR 的压缩软件?
  • Qt6.8中进行PDF文件读取和编辑
  • LeetCode:返回倒数第k个结点
  • MyBatis 一对多与多对一映射详解教程
  • macbook install chromedriver
  • 百度golang开发一面
  • SpringBoot集成CXF框架,实现WebService
  • 2025系统架构师---论面向对象的软件设计
  • Python字符串全面指南:从基础到高级操作
  • 计算机视觉与深度学习 | 点云配准算法综述(1992-2025)
  • Python核心技巧 类与实例:面向对象编程的基石
  • 协程补充---viewModelScope 相关知识点
  • 【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
  • 【NLP】 26. 语言模型原理与概率建模方法详解(Language Models)
  • QT聊天项目DAY08
  • C 语言逻辑运算符:组合判断,构建更复杂的条件
  • Cisco Packet Tracer 选项卡的使用
  • Python中的客户端和服务端交互的基本内容
  • vue实现AI问答Markdown打字机效果
  • 【C/C++】函数模板
  • Auto.js 脚本:清理手机数据但保留账号
  • 第R8周:RNN实现阿尔兹海默病诊断(pytorch)
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的网络安全防火墙技术方案‌(国产化替代J1900的全栈技术解析)
  • Python生活手册-正则表达式:从快递单到咖啡订单的文本魔法
  • Level DB --- MergingIterator
  • Compose 中使用 WebView
  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计