C# 方法(方法重载)

news2025/5/12 20:33:05

本章内容:
方法的结构
方法体内部的代码执行
局部变量
局部常量
控制流
方法调用
返回值
返回语句和void方法
局部函数
参数
值参数
引用参数
引用类型作为值参数和引用参数
输出参数
参数数组
参数类型总结
方法重载
命名参数
可选参数
栈帧
递归

方法重载

一个类中可以有多个同名方法,这叫作方法重载(methodoverloading)。使用相同名称的
每个方法必须有一个和其他方法不同的签名()。

  • 方法的签名由下列信息组成,它们在方法声明的方法头中:
    • 方法的名称;
    • 参数的数目;
    • 参数的数据类型和顺序;
    • 参数修饰符。
  • 返回类型不是签名的一部分,而我们往往误认为它是签名的一部分。
  • 请注意,形参的名称也不是签名的一部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
例如,下面4个方法是方法名AddValues的重载:

class A
{
    long AddValues(int a,int b)
    {
        return a+b;
    }

    long AddValues(int c,int d,int e){return c+d+3;}
    long AddValues(float f,float g){return (long)(f+g);}
    long AddValues(long h,long m){return h+m;}
}

下面的代码展示了一个非法的方法重载。两个方法仅返回类型和形参名不同,但它们仍有相
同的签名,因为它们的方法名相同,而且参数的数目、类型和顺序也相同。编译器会对这段代码
生成一条错误消息。

命名参数

至此我们用到的所有参数都是位置参数,也就是说每一个实参的位置都必须与相应的形参位
置对应。

此外,C#还允许我们使用命名参数(named parameter)。只要显式指定参数的名字,就可以
以任意顺序在方法调用中列出实参。细节如下。

  • 方法的声明没有什么不一样。形参已经有名字了。
  • 不过在调用方法的时候,形参的名字后面跟着冒号和实际的参数值或表达式,如下面的
    方法调用所示。在这里a、b、c是Calc方法3个形参的名字。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
图6-13演示了使用命名参数的结构。

在使用命名参数的时候,需要在方法调用中包含参数名。无须对方法声明做
任何改变
在调用的时候,你可以同时使用位置参数和命名参数,但所有位置参数必须先列出。例如,
下面的代码演示了Calc方法的声明及其使用位置参数和命名参数不同组合的5种调用方式。

class MyClass
{
    public int Calc(int a,int b,int c)
    {
        return (a+b)**c;
    }

    static void Main()
    {
        MyClass mc=new MyClass();

        int r0=mc.Calc(4,3,2);         //位置参数
        int r1=mc.Calc(4,b:3,3,c:2);   //位置参数和命名参数
        int r2=mc.Calc(4,c:2,b:3);     //交换了顺序
        int r3=mc.Calc(c:2,b:3,a:4);   //所有都是命名参数
        int r4=mc.Calc(c:2,b:1+2,a:3+1);//命名参数表达式

        Console.WriteLine($"{r0},{r1},{r3},{r4}");
    }
}

命名参数对于自描述的程序来说很有用,因为我们可以在方法调用的时候显示哪个值赋给哪
个形参。例如,如下代码调用了两次GetCylinderVolume,第二次调用具有更多的信息并且更不
容易出错。

class MyClass
{
    double GetCylinderVolume(double radius,double height)
    {
        return 3.1415*radius*radius*height;
    }

    static void Main(string[] args)
    {
        MyClass mc=new MyClass();
        double volume;

        volume=mc.GetCylinderVolume(3.0,4.0);

        volume=mc.GetCylinderVolume(radius:3.0,height:4.0);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3、食品包装控制系统 - /自动化与控制组件/food-packaging-control

76个工业组件库示例汇总 食品包装线控制系统 这是一个用于食品包装线控制系统的自定义组件,提供了食品包装生产线的可视化监控与控制界面。组件采用工业风格设计,包含生产流程控制、实时数据监控和逻辑编程三个主要功能区域。 功能特点 工业风格UI设…

初始图形学(7)

上一章完成了相机类的实现,对之前所学的内容进行了封装与整理,现在要学习新的内容。 抗锯齿 我们放大之前渲染的图片,往往会发现我们渲染的图像边缘有尖锐的"阶梯"性质。这种阶梯状被称为"锯齿"。当真实的相机拍照时&a…

线程的一些事(2)

在java中,线程的终止,是一种“软性”操作,必须要对应的线程配合,才能把终止落实下去 然而,系统原生的api其实还提供了,强制终止线程的操作,无论线程执行到哪,都能强行把这个线程干掉…

使用lldb看看Rust的HashMap

目录 前言 正文 读取桶的状态 获取键值对 键值对的指针地址 此时,读取数据 读取索引4的键值对 多添加几个键值对 使用i32作为键,&str作为值 使用i32作为键,String作为值 前言 前面使用ldb看了看不同的类型,这篇再使用…

2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面

软件介绍 适用于Windows 2025 最新5月蝴蝶视频号下载工具,免费使用,无广告且免费,支持对原视频和封面进行解析下载,亲测可用,现在很多工具都失效了,难得的几款下载视频号工具,大家且用且珍…

Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出

系列文章目录 目录 系列文章目录 前言 一、快速入门 1.1 实时渲染 1.2 USD 渲染 1.3 示例:创建一个粒子链 二、重要概念 三、API 参考 3.1 求解器 3.1.1 XPBD 求解器 3.1.2 VBD 求解器 3.1.3 MuJoCo 求解器 3.2 关节控制模式 四、Newton 集成 4.1 Is…

【C++】学习、项目时Debug总结

这里写目录标题 1. 内存问题1.1. 内存泄漏1.1.1. 内存泄漏案例检查方法1.1.2. 主线程提前退出导致【控】1.1.3. PostThreadMessage失败导致的内存泄漏**【控】**1.1.4. SendMessage 时关闭客户端【控】1.1.5. 线程机制导致【**控】**1.1.6. exit(0)导致【…

26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)

408答疑 文章目录 六、指令流水线指令流水线的基本概念流水线的基本实现流水线设计的原则流水线的逻辑结构流水线的时空图表示 八、参考资料鲍鱼科技课件26王道考研书 六、指令流水线 前面介绍的指令都是在单周期处理机中采用串行方法执行的,同一时刻 CPU 中只有一…

AI Agent-基础认知与架构解析

定义 AI Agent 可以理解为一种具备感知、决策和行动能力的智能实体,能够在复杂的环境中自主运行,并根据环境变化动态调整自身行为,以实现特定目标。与传统的人工智能程序相比,AI Agent 具有更强的自主性、交互性和适应性。它不仅能…

C语言--字符函数

C语言--字符函数 一、字符函数1.1 iscntrl1.2 isspace1.3 isdigit1.4 isxdigit1.5 islower1.6 isupper1.7 isalpha1.8 isalnum1.9 ispunct1.10 isgraph1.11 isprint 在编程的过程中,我们会经常处理字符,为了方便操作,C语言标准库中提供了一系…

菜鸟之路Day30一一MySQL之DMLDQL

菜鸟之路Day30一一MySQL之DML&DQL 作者:blue 时间:2025.5.8 文章目录 菜鸟之路Day30一一MySQL之DML&DQL一.DML0.概述1.插入语句(insert)2.更新语句(update)3.删除语句(delete&#xf…

基 LabVIEW 的多轴电机控制系统

在工业自动化蓬勃发展的当下,多轴伺服电机控制系统的重要性与日俱增,广泛应用于众多领域。下面围绕基于 LabVIEW 开发的多轴伺服电机控制系统展开,详细阐述其应用情况。 一、应用领域与场景 在 3D 打印领域,该系统精确操控打印头…

《Go小技巧易错点100例》第三十二篇

本期分享: 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全: 1)双存储结构: 包含原子化的 read(只读缓存,无锁快…

需求分析阶段测试工程师主要做哪些事情

在软件测试需求分析阶段,主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作,为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情: 1. 需求收集与整理 收集需求文档&#x…

项目模拟实现消息队列第二天

消息应答的模式 1.自动应答: 消费者把这个消息取走了,就算是应答了(相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server,消费者这三个部分的 2.针对生产者和消费…

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如 HashTable 这样的代码中,他的方法都是使用 sync…

dify 部署后docker 配置文件修改

1:修改 复制 ./dify/docker/.env.example ./dify/docker/.env 添加一下内容 # 启用自定义模型 CUSTOM_MODEL_ENABLEDtrue# 将OLLAMA_API_BASE_URL 改为宿主机的物理ip OLLAMA_API_BASE_URLhttp://192.168.72.8:11434# vllm 的 OPENAI的兼容 API 地址 CUSTOM_MODE…

数据结构——排序(万字解说)初阶数据结构完

目录 1.排序 2.实现常见的排序算法 2.1 直接插入排序 ​编辑 2.2 希尔排序 2.3 直接选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 递归版本 2.6.1.1 hoare版本 2.6.1.2 挖坑法 2.6.1.3 lomuto前后指针 2.6.1.4 时间复杂度 2.6.2 非递归版本 2.7 归并排序…

快速入门深度学习系列(3)----神经网络

本文只针对图进行解释重要内容 这就是入门所需要掌握的大部分内容 对于不懂的名词或概念 你可以及时去查 对于层数 标在上面 对于该层的第几个元素 标在下面 输入层算作第0层 对于第一层的w b 参数 维度如下w:4*3 b:4*1 这个叫做神经元 比如对于第一层的神经元 这里说的很…

在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程

在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程 资源宝分享:https://www.httple.net/154301.html 一次性打包涵盖200个常用工具!无论是日常的图片处理、文件格式转换,还是实用的时间…