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

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#基础》

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

在这里插入图片描述

相关文章:

  • 【组件】跳动的图标 动画
  • Linux软链接的目的
  • 使用nvm use切换版本号,报exit status 5
  • 图解 DeepSeek-R1【译】
  • 人员睡岗检测算法AI智能分析网关V4打造工业/安防/交通等多场景应用方案
  • 2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析
  • 06.概念二:神经网络
  • 阿里云云效对接SDK获取流水线制品
  • mock库知识笔记(持续更新)
  • ⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)
  • 【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问
  • VTK|Z轴拉伸功能的实现
  • maven项目编译时复制xml到classes目录方案
  • 2025-05-28 Python-List-二分法
  • 第一节 51单片机概述
  • 班级管理系统
  • vue 如何对 div 标签 设置assets内本地背景图片
  • 【网络安全】——Modbus协议详解:工业通信的“通用语言”
  • Spring AI 1.0 GA 深度解析:构建企业级AI应用的全栈实践指南
  • Linux 常用命令 -md5sum【计算和校验文件的MD5哈希值】
  • 网站维护 上海/关键词优化app
  • 1如何做网站推广/seo咨询价格找推推蛙
  • .red域名做网站好不好/网页制作软件推荐
  • 0基础学网站开发/目前最牛的二级分销模式
  • 苏州360推广网站建设/线上宣传渠道
  • 对于网站建设提出建议/推广手段有哪些