C#基础(11)函数重载
前言
前面我们已经完成了ref和out补充知识点的学习,以及函数参数相关的学习,今天便再次为函数补充一个知识点:函数重载。
函数重载是指在同一个作用域中,可以有多个同名函数,但参数列表不同。它的发展可以追溯到早期的编程语言。
在早期的编程语言中,函数重载并不被支持。如果需要定义多个功能相似但参数不同的函数,需要为每一个函数提供不同的名称。这样会导致代码冗余,可读性降低。
随着编程语言的发展,函数重载开始得到支持。C++是第一个支持函数重载的编程语言,它的发展历程对函数重载的发展有重要影响。
C++的函数重载使得程序员可以使用相同的函数名来处理不同类型和数量的参数,从而提高了代码的可读性和可维护性。编译器会根据传递给函数的参数类型和数量来选择合适的函数进行调用。
随着时间的推移,函数重载在其他编程语言中也得到了支持。Java、C#、Python等主流编程语言都支持函数重载。
基本概念
在同一语句块中,函数名相同,参数数量不同,类型,顺序不同
最基本的例子,其实你可以点进console里(鼠标放到console这个方法处,然后按f12),可以看到它内部的方法构成,你会发现它本身也有函数重载。
以下是博主在console里截屏到的一些重载的方法。

作用
- 命名一组类似的函数,减少函数的数量,避免命名空间的污染
- 提升程序的可读性
实例
- 重载和返回类型无关,又和参数类型,个数,顺序有关
- 调用时,程序会自己根据传入的参数类型判断使哪一个
参数数量不同
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 套件的一部分,能够收集和报告各种系统活动的信息࿰…...
掌握 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:杨辉三角
题目链接:118. 杨辉三角 - 力扣(LeetCode) 代码如下 class Solution {public:vector<vector<int>> generate(int numRows) {vector<vector<int>> dp(numRows);vector<int> temp(numRows);for (int i 0; i &…...
介绍一下大模型或者多模态?
什么是大模型、多模态 大模型多模态 大模型 定义: 大模型,通常指的是在深度学习领域,具有大规模参数和复杂结构的模型。这些模型往往需要大量的计算资源和数据进行训练和推理。大模型因其强大的表示能力和泛化性能,在多个领域展现…...
深度学习之图像数据集增强(Data Augmentation)
文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强(Data Augmentation)是一种技术,通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这些变换可以是…...
小程序与APP的区别
目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…...
Linux Kernel Makefiles 编译标志详解
在Linux内核开发中,Makefile文件扮演着至关重要的角色,它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志(flags),这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…...
数据可视化pyecharts——数据分析(柱状图、折线图、饼图)
安装 首先确保已经安装了pyecharts库,如果没有,可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar,从pyecharts导入options。准备数据(如类别数据x_data和对应的数值数据y_data)。创建Bar对…...
小程序构建npm失败
小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库,构建npm时报错。 项目工程结构说明 初始化后的项目中,包含miniprogram文件夹和一些项目配置文件,在project.config.json文件中…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
