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

C#基础(11)函数重载

前言

前面我们已经完成了ref和out补充知识点的学习,以及函数参数相关的学习,今天便再次为函数补充一个知识点:函数重载。

函数重载是指在同一个作用域中,可以有多个同名函数,但参数列表不同。它的发展可以追溯到早期的编程语言。

在早期的编程语言中,函数重载并不被支持。如果需要定义多个功能相似但参数不同的函数,需要为每一个函数提供不同的名称。这样会导致代码冗余,可读性降低。

随着编程语言的发展,函数重载开始得到支持。C++是第一个支持函数重载的编程语言,它的发展历程对函数重载的发展有重要影响。

C++的函数重载使得程序员可以使用相同的函数名来处理不同类型和数量的参数,从而提高了代码的可读性和可维护性。编译器会根据传递给函数的参数类型和数量来选择合适的函数进行调用。

随着时间的推移,函数重载在其他编程语言中也得到了支持。Java、C#、Python等主流编程语言都支持函数重载。

基本概念

在同一语句块中,函数名相同,参数数量不同,类型,顺序不同

最基本的例子,其实你可以点进console里(鼠标放到console这个方法处,然后按f12),可以看到它内部的方法构成,你会发现它本身也有函数重载。

以下是博主在console里截屏到的一些重载的方法。

作用

  1. 命名一组类似的函数,减少函数的数量,避免命名空间的污染
  2. 提升程序的可读性

实例

  • 重载和返回类型无关,又和参数类型,个数,顺序有关
  • 调用时,程序会自己根据传入的参数类型判断使哪一个

参数数量不同

class Program
{static void Main(string[] args){int result1 = Add(1, 2);int result2 = Add(1, 2, 3);Console.WriteLine("Result 1: " + result1); // 输出:3Console.WriteLine("Result 2: " + result2); // 输出:6Console.ReadLine();}static int Add(int num1, int num2){return num1 + num2;}static int Add(int num1, int num2, int num3){return num1 + num2 + num3;}
}

以上这个例子实现了Add方法的重载,可以看到,我们实现了多个数的相加,不过这个例子有点不妥当,因为真正要做到无限相加,其实我们有其他的方法实现,不过这个就留给你去思考了。

参数类型不同

using System;class Program
{static void Main(string[] args){int num1 = 5;float num2 = 3.5f;string str = "Hello, world!";MyFunction(num1);MyFunction(num2);MyFunction(str);Console.ReadLine();}static void MyFunction(int num){Console.WriteLine("You entered an integer: " + num);}static void MyFunction(float num){Console.WriteLine("You entered a float: " + num);}static void MyFunction(string str){Console.WriteLine("You entered a string: " + str);}
}

以上例子是实现了一个参数判断的方法,我们也可以直观感受到传不同参数系统的自动调用,建议你自己去实践一下。

参数数量相同但是顺序不同

using System;public class Speaker
{public void Speak(string message){Console.WriteLine("我说:" + message);}public void Speak(string message, string language){Console.WriteLine("我用" + language + "说:" + message);}public void Speak(int times, string message){Console.WriteLine("我重复" + times + "次说:" + message);}public void Speak(string message, int times){Console.WriteLine("我说" + message + times + "次");}
}public class Program
{public static void Main(string[] args){Speaker speaker = new Speaker();speaker.Speak("你好!");speaker.Speak("Hello!", "English");speaker.Speak(3, "再见!");speaker.Speak("Goodbye!", 2);}
}

以上例子实现一个说话方法的重载,我们其实就能感受到有时候数量相同但是顺序不同在实际开发中有什么作用,我们可能在某些使用上,不用太在乎参数顺序,就可以达到那个方法,但是如果要开发一个如此的函数,需要大量的重载,如果只有两个参数,只用写两种,但是如果有三个参数,就要写六种。

所以这大抵是方便后人的一种写法了。

ref和out

using System;class Program
{static void Main(string[] args){int a = 5;int b = 10;int result1 = Add(a, b);Console.WriteLine("Addition Result: " + result1); // Output: 15Subtract(ref a, out b);Console.WriteLine(a+b); // Output: 55double c = 2.5;double d = 3.5;double result3 = Add(c, d);Console.WriteLine("Addition Result: " + result3); // Output: 6.0}static int Add(int num1, int num2){return num1 + num2;}static double Add(double num1, double num2){return num1 + num2;}static void Subtract(ref int num1, out int num2){num2 = 10;num1 -= num2;}
}

以上这个例子,其实只是想告诉大家ref,和out修饰的变量其实完全可以当做一种新变量来看,也是可以参与到函数重载当中的。

总结

我们通过这些例子的学习,想毕你一定已经掌握了函数重载的相关内容,我相信你只要稍加练习,便能达到很熟练的程度。

不过不管知识点难或者简单,还是那句话,学习路上,戒骄戒躁,脚踏实地。

请期待我的下一篇博客!

相关文章:

C#基础(11)函数重载

前言 前面我们已经完成了ref和out补充知识点的学习,以及函数参数相关的学习,今天便再次为函数补充一个知识点:函数重载。 函数重载是指在同一个作用域中,可以有多个同名函数,但参数列表不同。它的发展可以追溯到早期…...

堆栈指针寄存器SP的初值是多少?执行PUSH AX命令后,SP的值是多少?执行POP BX后,SP的值是多少?为什么答案给的是200,202,200。

欢迎来到我的技术博客! 🎉 这里不仅有满满的编程干货和学习资源,我的某站账号也为你准备了更多实用的技术视频和知识分享。 👉 点击关注我的小破站账号,获取更多编程技巧和学习资源! 小破站主页 例题 ST…...

python爬虫初体验(二)

在Python中,每个模块都有一个内置的变量 name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。 作用 模块可被导…...

细说渗透测试:阶段、流程、工具和自动化开源方案

不知有多少“曾梦想仗剑走天涯”的网络与信息安全从业者,是因为渗透测试的初心而步入这个行业的。不过,您是否对渗透测试及其漏洞扫描的相关概念感到既熟悉又陌生呢?您是否觉得自己还停留在从工作实践中积累的感性认识呢?下面&…...

redis 十大应用场景

Redis 是一个开源的内存数据结构存储系统,广泛应用于各种场景,尤其在高性能、低延迟需求的场景中。以下是 Redis 的一些典型应用场景: 1. 缓存系统 Redis 最常见的用途之一是作为缓存系统,以减少数据库访问的频率,提升…...

信息安全数学基础(15)欧拉定理

前言 欧拉定理是数论中的一个重要定理,它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用,特别是在公钥密码体制(如RSA加密算法)中。 一、表述 设 n 是一个正整数,a 是一个与 n 互…...

sar(1) command

文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 sar(System Activity Report)收集、报告或保存系统活动信息。 sar 是一个用于监控和报告系统性能的命令行工具。它是 sysstat 套件的一部分,能够收集和报告各种系统活动的信息&#xff0…...

掌握 JavaScript 中的函数表达式

函数表达式是 javascript 中定义函数的一种方式。与函数声明不同,函数表达式可以是匿名的,并且通常用于将函数视为值的情况。在本文中,我们将探讨函数表达式、如何将函数视为值、回调函数以及函数表达式和函数声明之间的差异。 函数表达式 …...

OpenGL 原生库6 坐标系统

概述 为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate)&a…...

LabVIEW提高开发效率技巧----VI服务器和动态调用

VI服务器(VI Server)和动态调用是LabVIEW中的两个重要功能,可以有效提升程序的灵活性、模块化和可扩展性。通过这两者的结合,开发者可以在运行时动态加载和调用VI(虚拟仪器),实现更为复杂的应用…...

求1000以内所有恰好能分解成10组两个素数之和

要求 根据哥德巴赫猜想,任意一个大偶数都可以分解为两个素数之和。但许多偶数分解为两个素数之和并不是唯一的。 请编写函数fun,其功能是:求1000(不包括1000)以内的所有恰好能分解成10组两个素数之和(5109和1095被认为是同一组)的偶并依次存入数组a中并…...

Webpack 和 Vite 的区别

Webpack 是一种模块打包工具,主要功能是将各种资源(如 JavaScript、CSS、图片等)通过 loader 和 plugin 转换和打包成可以直接在浏览器中运行的代码。其核心思想是以代码分割、按需加载和优化资源来提升性能。 Vite 是一种新型构建工具&…...

C++——初步认识C++和namespace的用法

1.编程语言排行榜 我们通过排行可以看出 C在变成语言中还是占据着重要的地位 2.C在工作领域中的应用 1.PC客户端开发。⼀般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话⼀般是C和 QT,QT 是⼀个跨平台的 C图形用户界面(G…...

LeetCode118:杨辉三角

题目链接&#xff1a;118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution {public:vector<vector<int>> generate(int numRows) {vector<vector<int>> dp(numRows);vector<int> temp(numRows);for (int i 0; i &…...

介绍一下大模型或者多模态?

什么是大模型、多模态 大模型多模态 大模型 定义&#xff1a; 大模型&#xff0c;通常指的是在深度学习领域&#xff0c;具有大规模参数和复杂结构的模型。这些模型往往需要大量的计算资源和数据进行训练和推理。大模型因其强大的表示能力和泛化性能&#xff0c;在多个领域展现…...

深度学习之图像数据集增强(Data Augmentation)

文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强&#xff08;Data Augmentation&#xff09;是一种技术&#xff0c;通过对现有数据进行各种变换和处理来生成新的训练样本&#xff0c;从而增加数据集的多样性和数量。这些变换可以是…...

小程序与APP的区别

目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序&#xff0c;它们在多个方面存在明显的区别。以下是对这些区别的详细阐述&#xff1a;…...

Linux Kernel Makefiles 编译标志详解

在Linux内核开发中&#xff0c;Makefile文件扮演着至关重要的角色&#xff0c;它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志&#xff08;flags&#xff09;&#xff0c;这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…...

数据可视化pyecharts——数据分析(柱状图、折线图、饼图)

安装 首先确保已经安装了pyecharts库&#xff0c;如果没有&#xff0c;可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar&#xff0c;从pyecharts导入options。准备数据&#xff08;如类别数据x_data和对应的数值数据y_data&#xff09;。创建Bar对…...

小程序构建npm失败

小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库&#xff0c;构建npm时报错。 项目工程结构说明 初始化后的项目中&#xff0c;包含miniprogram文件夹和一些项目配置文件&#xff0c;在project.config.json文件中…...

PyTorch 3.0静训性能断崖预警:当AllReduce延迟>8.3ms或图编译耗时>117s时,你的训练任务已在 silently fail——附实时诊断CLI工具

第一章&#xff1a;PyTorch 3.0静态图分布式训练的静默失效危机全景PyTorch 3.0 引入的 TorchScript 静态图编译机制与 torch.distributed 的深度耦合&#xff0c;在多节点多卡场景下暴露出一类高危静默失效现象&#xff1a;训练进程持续运行、梯度同步无报错、loss 曲线看似收…...

Blender 3MF插件终极指南:从零开始掌握3D打印文件格式

Blender 3MF插件终极指南&#xff1a;从零开始掌握3D打印文件格式 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 3MF&#xff08;3D Manufacturing Format&#xff09;格…...

程序实现环境温度对传感器的误差补偿,不同温度下测量精度一致,颠覆温漂难题。

无论你是做工业传感还是消费电子&#xff0c;只要你测物理量&#xff08;电压、电流、压力、流量&#xff09;&#xff0c;温度就是精度的头号杀手。今天我们用 Python 打造一套自适应温度补偿系统&#xff0c;让仪器在不同温度下“不忘初心”。一、 实际应用场景描述 (Scenari…...

FreeRTOS数据通信避坑指南:为什么我的MessageBuffer总是接收失败?

FreeRTOS消息缓冲区实战&#xff1a;从接收失败到高效通信的深度解析 第一次在FreeRTOS项目中使用MessageBuffer时&#xff0c;我遇到了一个令人抓狂的问题——明明发送端显示消息已成功写入&#xff0c;接收端却总是返回0字节。调试器显示缓冲区非空&#xff0c;但xMessageBuf…...

YOLOv8鹰眼目标检测问题解决:常见部署错误与使用技巧汇总

YOLOv8鹰眼目标检测问题解决&#xff1a;常见部署错误与使用技巧汇总 1. 引言&#xff1a;为什么选择YOLOv8鹰眼目标检测 YOLOv8作为当前计算机视觉领域最先进的目标检测模型之一&#xff0c;以其卓越的实时性和准确性赢得了广泛认可。鹰眼目标检测镜像基于Ultralytics官方YO…...

AIVideo一站式AI长视频工具与Visual Studio的深度集成开发

AIVideo一站式AI长视频工具与Visual Studio的深度集成开发 1. 引言 作为一名长期使用Visual Studio进行开发的程序员&#xff0c;我经常遇到这样的痛点&#xff1a;想要录制一段代码演示视频&#xff0c;需要反复切换多个软件&#xff1b;想要制作项目介绍视频&#xff0c;得…...

魔兽争霸3帧率优化与性能调优指南:从卡顿到高流畅度的开源解决方案

魔兽争霸3帧率优化与性能调优指南&#xff1a;从卡顿到高流畅度的开源解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 在现代硬件环境下运行经…...

进程间通信(IPC):原理、场景与选型

在操作系统的世界里&#xff0c;进程是程序运行的基本单元&#xff0c;每个进程都拥有独立的内存空间和资源&#xff0c;彼此之间相互隔离&#xff0c;无法直接访问对方的数据。这种隔离机制保证了系统的稳定性&#xff0c;避免进程间相互干扰&#xff0c;但也带来了一个问题&a…...

基于 SpringBoot 的自助图书借阅管理系统源码讲解

以下是一个基于 SpringBoot 的自助图书借阅管理系统的 核心源码讲解&#xff0c;涵盖用户管理、图书管理、借阅管理、设备对接等关键模块&#xff0c;代码结构清晰&#xff0c;可直接用于学习或二次开发。一、项目结构src/main/java/com/library/ ├── config/ # 配…...

共享图书借阅系统 Java 源码 + 数据库设计完整方案

以下是一个共享图书借阅系统的Java源码与数据库设计的完整方案&#xff0c;涵盖系统架构、核心功能实现、数据库设计以及安全防护措施等方面&#xff1a;一、系统架构技术栈&#xff1a;后端&#xff1a;Spring Boot 2.x MyBatis-Plus&#xff08;简化数据库操作&#xff09;前…...