当前位置: 首页 > 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修饰的变量其实完全可以当做一种新变量来看,也是可以参与到函数重载当中的。

总结

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

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

请期待我的下一篇博客!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JS】将class转为构造函数需要注意的细节
  • 深度学习算法
  • 小鼠行为学实验——小鼠转棒实验【AbMole】
  • 脚本基本规则
  • 《团体标准组织综合绩效评价指标体系》深度解析
  • Go 中 RPC 的使用教程
  • 用网卡的ap模式抓嵌入式设备的网络包
  • python+adb
  • PHP即刻送达同城派送小程序系统
  • 数据分析-螺旋环状气泡图
  • 针对SVM算法初步研究
  • 【TabBar嵌套Navigation案例-复习昨天的内容-预习今天的内容 Objective-C语言】
  • 【数据结构】线性表的定义和基本操作
  • Java零基础-charAt(int index)详解
  • 从零实现诗词GPT大模型:实现多头自注意力
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【node学习】协程
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ➹使用webpack配置多页面应用(MPA)
  • bootstrap创建登录注册页面
  • C学习-枚举(九)
  • ES6 学习笔记(一)let,const和解构赋值
  • Java 多线程编程之:notify 和 wait 用法
  • js算法-归并排序(merge_sort)
  • nodejs:开发并发布一个nodejs包
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React-Native - 收藏集 - 掘金
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring声明式事务管理之一:五大属性分析
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 7行Python代码的人脸识别
  • zabbix3.2监控linux磁盘IO
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​iOS实时查看App运行日志
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​如何防止网络攻击?
  • #1015 : KMP算法
  • $jQuery 重写Alert样式方法
  • (1)Android开发优化---------UI优化
  • (21)起落架/可伸缩相机支架
  • (23)Linux的软硬连接
  • (C#)一个最简单的链表类
  • (LeetCode) T14. Longest Common Prefix
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (补充)IDEA项目结构
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (第30天)二叉树阶段总结
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)Controller接口控制器详解(三)
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)