20250528-C#知识:函数简介及函数重载

C#知识:函数简介及函数重载

本文主要介绍函数参数和函数重载相关的知识点


1、函数

  • 函数一般写在类中

  • 一般函数调用

        static int Add(int num, int value){num += value;return num;}
            //一般函数调用,发生值类型参数的复制int num = 1;Add(num, 1);    //调用 Add(int num, int value)Console.WriteLine(num); //1

2、ref和out

2.1 ref

  • 必须初始化,它变我也变
  • 类似C++中的引用,不需要在被调用函数中赋值
  • ref函数形参不能有默认值
        static int Add(ref int num, int value){num += value;return num;}
            int num2 = 1;Add(ref num2, 1);   //调用 Add(ref int num, int value)Console.WriteLine(num2);    //2

2.2 out

  • 可以不初始化,它变我也变
  • 需要在被调用函数中赋值
  • out函数形参不能有默认值
        static int Add2(out int num, int value){num = 100;num += value;   return num;}
            int num3 = 2;   //这个赋值没啥子用,在被调用函数值又会重新赋值Add2(out num3, 2);  //调用 Add2(out int num, int value)Console.WriteLine(num3);    //102

3、params变长参数

  • 在函数调用时,可以传入多个相同类型的实参
  • 只能有一个形参为params类型,且必须是最后一个
        static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}
            int num4 = Add(0, 1, 2, 3); //调用 Add(int num, params int[] values)Console.WriteLine(num4);    //6

4、默认参数

  • 可以为多个形参设置默认值,但是有默认值的形参后面所有形参必须都有默认值
        static int Add3(int num, int value = 1){num += value;return num;}
            int num5 = Add3(20);    //调用 Add3(int num, int value = 1)Console.WriteLine(num5);    //21

5、函数重载

  • 方法签名不同(参数类型或参数个数不同)的同名函数构成重载
  • ref int 或者out int 可以和 int 构成重载
  • ref 与 out 不存在重载
  • params int[]可以和 int 构成重载
  • params int[] 不能与 int[] 构成重载
  • 默认值不构成重载
        static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 构成重载static int Add(ref int num, int value){num += value;return num;}//ref 与 out 不存在重载//static int Add(out int num, int value)//{//    num += value;//    return num;//}static int Add2(out int num, int value){num = 100;num += value;   return num;}// params int[]可以和 int 构成重载static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能与 int[] 构成重载//static int Add(int num, int[] values)//{//    foreach(int value in values)//    {//        num += value;//    }//    return num;//}//默认值不构成重载//static int Add(int num , int value = 1)//{//    num += value;//    return num;//}static int Add3(int num, int value = 1){num += value;return num;}

6、完整代码示例:

namespace FunctionOverloading
{internal class Program{static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 构成重载static int Add(ref int num, int value){num += value;return num;}//ref 与 out 不存在重载//static int Add(out int num, int value)//{//    num += value;//    return num;//}static int Add2(out int num, int value){num = 100;num += value;   return num;}// params int[]可以和 int 构成重载static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能与 int[] 构成重载//static int Add(int num, int[] values)//{//    foreach(int value in values)//    {//        num += value;//    }//    return num;//}//默认值不构成重载//static int Add(int num , int value = 1)//{//    num += value;//    return num;//}static int Add3(int num, int value = 1){num += value;return num;}static void Main(string[] args){//函数一般写在类中//一般函数调用,发生值类型参数的复制int num = 1;Add(num, 1);    //调用 Add(int num, int value)Console.WriteLine(num); //1//ref和out//ref//必须初始化,它变我也变//类似C++中的引用,不需要在被调用函数中赋值//ref函数形参不能有默认值int num2 = 1;Add(ref num2, 1);   //调用 Add(ref int num, int value)Console.WriteLine(num2);    //2//out//可以不初始化,它变我也变//需要在被调用函数中赋值//out函数形参不能有默认值int num3 = 2;   //这个赋值没啥子用,在被调用函数值又会重新赋值Add2(out num3, 2);  //调用 Add2(out int num, int value)Console.WriteLine(num3);    //102//params变长参数//在函数调用时,可以传入多个相同类型的实参//只能有一个形参为params类型,且必须是最后一个int num4 = Add(0, 1, 2, 3); //调用 Add(int num, params int[] values)Console.WriteLine(num4);    //6//默认参数//可以为多个形参设置默认值,但是有默认值的形参后面所有形参必须都有默认值int num5 = Add3(20);    //调用 Add3(int num, int value = 1)Console.WriteLine(num5);    //21}}
}

7、参考资料

  1. 《唐老狮C#基础》

本篇结束,感谢您的阅读~

在这里插入图片描述

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

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

相关文章

Vue内置指令与自定义指令

一、前言 在 Vue 开发中,指令(Directives) 是一种非常强大的特性,它允许我们以声明式的方式操作 DOM。Vue 提供了一些常用的内置指令,如 v-if、v-show、v-bind、v-on 等,同时也支持开发者根据需求创建自己…

华为AP6050DN无线接入点瘦模式转胖模式

引言 华为AP6050DN是一款企业级商用的无线接入点。由于产品定位原因,其默认工作在瘦模式下,即须经AC统一控制和管理,是不能直接充当普通的无线路由器来使用的。 而本文的目的,就是让其能脱离AC的统一控制和管理,当作普通无线路由器来使用。 硬件准备 华为AP6050DN无线接…

程序员出海之英语-使用手册

为什么现在实时翻译工具这么牛逼了,AI转译这么准确了,我还在这里跟老古董一样吭哧吭哧学英语呢? 这是因为我们始终是和人打交道,不仅仅是为了考试,看懂官方文章,听懂官方视频。这里为什么说官方&#xff0c…

Java 事务管理:在分布式系统中实现可靠的数据一致性

Java 事务管理:在分布式系统中实现可靠的数据一致性 在当今的软件开发领域,分布式系统逐渐成为主流架构。然而,这也给事务管理带来了巨大的挑战。本文将深入探讨 Java 事务管理在分布式系统中的关键要点,并通过详细代码实例展示如…

微信小程序关于截图、录屏拦截

1.安卓 安卓: 在需要禁止的页面添加 onShow() {if (wx.setVisualEffectOnCapture) {wx.setVisualEffectOnCapture({visualEffect: hidden,complete: function(res) {}})}},// 页面隐藏和销毁时需要释放防截屏录屏设置onHide() {if (wx.setVisualEffectOnCapture) {w…

使用 PySpark 从 Kafka 读取数据流并处理为表

使用 PySpark 从 Kafka 读取数据流并处理为表 下面是一个完整的指南,展示如何通过 PySpark 从 Kafka 消费数据流,并将其处理为可以执行 SQL 查询的表。 1. 环境准备 确保已安装: Apache Spark (包含Spark SQL和Spark Streaming)KafkaPySpark对应的Ka…

第十天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 哈哈,十天缺了两天,我写的文章现在质量不高,所以我可能考虑,应该一星期或者三四天出点高质量的文章,同时很开心大家能够学到知识&a…

mediapipe标注视频姿态关键点(基础版加进阶版)

前言 手语视频流的识别有两种大的分类,一种是直接将视频输入进网络,一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的,我就放这里了。环境自己配置一下吧&…

Redis数据迁移方案及持久化机制详解

#作者:任少近 文章目录 前言Redis的持久化机制RDBAOF Redis save和bgsave的区别redis数据迁移redis单机-单机数据迁移redis 主从-主从数据迁移redis 单机-cluster数据迁移redis cluster –redis cluster数据迁移 前言 Redis数据迁移是常见需求,主要包括…

图论回溯

图论 200.岛屿数量DFS 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外&#xff…

真实网络项目中交换机常用的配置与解析

一、配置三层链路聚合增加链路带宽 1.组网需求 某企业有多个部门分布在不同的地区,由于业务发展的需要,不同区域的部门与部门之间有进行带有VLAN Tag的报文的传输需求。采用透明网桥的远程桥接和QinQ功能,可以实现企业在不同区域部门之间进…

【Redis】过期键删除策略,LRU和LFU在redis中的实现,缓存与数据库双写一致性问题,go案例

一、Redis 中的过期键删除策略有哪些? 采用了 惰性删除 和 定期删除 两种策略处理过期键: 1. 惰性删除(Lazy Deletion) 机制:只有在访问 key 时才检查是否过期,如果已过期则立刻删除。优点:对…

为什么单张表索引数量建议控制在 6 个以内

单张表索引数量建议控制在6个以内的主要原因包括以下几点‌: ‌性能影响‌:索引会占用额外的磁盘空间。如果索引数量过多,会占用大量的磁盘空间,尤其是在数据量较大的情况下,索引占用的空间可能会超过数据本身。此外&…

深度学习实战109-智能医疗随访与健康管理系统:基于Qwen3(32B)、LangChain框架、MCP协议和RAG技术研发

大家好,我是微学AI,今天给大家介绍一下深度学习实战109-智能医疗随访与健康管理系统:基于Qwen3(32B)、LangChain框架、MCP协议和RAG技术研发。在当今医疗信息化快速发展的背景下,医疗随访与健康管理面临着数据分散、信息整合困难、个性化方案生成效率低等挑战。传统的医疗随…

聊一聊 .NET Dump 中的 Linux信号机制

一:背景 1. 讲故事 当 .NET程序 在Linux上崩溃时,我们可以配置一些参考拿到对应程序的core文件,拿到core文件后用windbg打开,往往会看到这样的一句信息 Signal SIGABRT code SI_USER (Sent by kill, sigsend, raise)&#xff0c…

如何在uniapp H5中实现路由守卫

目录 Vue3 app.config.globalProperties 1. 创建 Vue 应用实例 2. 添加全局属性或方法 3. 在组件中使用全局属性或方法 beforeEach在uniapp的注册 1、在H5中这两个对象是都存在的。「router:route」但是功能并不全面,具体可参考下图。 2、刚刚测试了一下,在微信小程序…

无人机降落伞设计要点难点及原理!

一、设计要点 1. 伞体结构与折叠方式 伞体需采用轻量化且高强度的材料(如抗撕裂尼龙或芳纶纤维),并通过多重折叠设计(如三重折叠缝合)减少展开时的阻力,同时增强局部承力区域的强度。 伞衣的几何参数&am…

AI时代新词-AI增强现实(AI - Enhanced Reality)

一、什么是AI增强现实(AI - Enhanced Reality)? AI增强现实(AI - Enhanced Reality)是指将人工智能(AI)技术与增强现实(Augmented Reality,简称AR)技术相结合…

基于Matlab实现各种光谱数据预处理

在IT领域,尤其是在数据分析和科学研究中,光谱数据的预处理是至关重要的步骤。光谱数据通常包含了丰富的信息,但往往受到噪声、杂散光、背景信号等因素的影响,需要通过预处理来提取有效信号,提高分析的准确性和可靠性。…

用 commitizen-go 来实现标准化你的Git提交信息 【windows 版】

前言 团队中有部分人的 commit 信息比较随意,因此想用工具来进行约束, web 项目可以使用 commitizen 来实现, 但是 golang 又该用什么来约束呢, 在 Github 上找到 commitizen-go 可以做为 commitizen 平替,但该说明文…