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

(7)C#传智:方法及参数、重载(第7天)

一、方法作用域
    被调用者需要调用者的值,方法有二:
    1.传参数.

        private static void Main(string[] args){int m = 3;Console.WriteLine(m);Console.ReadKey();}public static int GetMax(int m){return m + 3;}

   2.使用静态字段模拟全局.
        多个方法都需要时,可以用静态字段/全局变量避免传递参数.
    
        若调用者需要被调用者的值,方法二:
        1).返回值。return 值;        

        private static void Main(string[] args){int a, m = 0;a = Test(m);//返回值可以作用于aConsole.WriteLine("{0},{1}", m, a);//0,3Console.ReadKey();}public static int Test(int m){m += 3;return m;//此中m仅作用于本函数}

        
    3.全局或静态变量
        形参与实参名称相同与否,无关紧要。两者类型一一对应,均需在内存开辟空间。
        
        break语句将终止最接近的封闭迭代语句(即for、foreach、while 或do循环)或switch语句。
        break语句将控制权转交给已终止语句后面的语句(若有)。
        
        方法的功能一定要单一,只能做一件事。
        方法最忌讳的就是出现提示用户输入的字眼。因为有些仅限于控制台,尽量避免。
    

二、三个高级参数
    out、ref、param
    
    1.out 必须在方法内部赋值
        返回多个相同类型的值时,可以用返回数组的方式:

        private static void Main(string[] args){int[] num = { 1, 2, 3, 4, 5, 6 };int[] res = GetM(num);Console.WriteLine("{0},{1},{2},{3}", res[0], res[1], res[2], res[3]);Console.ReadKey();}public static int[] GetM(int[] num){int[] res = new int[4];//0最大1最小2总和3平均res[0] = num[0]; res[1] = num[0]; res[2] = 0;for (int i = 0; i < num.Length; i++){if (num[i] > res[0]) { res[0] = num[i]; }if (num[i] < res[1]) { res[1] = num[i]; }res[2] += num[i];//总和}res[3] = res[2] / num.Length;//平均return res;}

        但如果是返回多个不同类型时,数组就不适用了。这时用out参数
        形参与实参必须都要带out关键字。out的个数与类型必须一一对应.
        实参可以不必先赋值,因为在调用的返回时会赋值(与方法返回值无关)。

        private static void Main(string[] args){int[] num = { 1, 2, 3, 4, 5, 6 };int max1, min1, sum1, avg1;//要接收返回值的多个不同类型,不必赋初值.Test(num, out max1, out min1, out sum1, out avg1);//out不得省略Console.WriteLine("{0},{1},{2},{3}", max1, min1, sum1, avg1);Console.ReadKey();}public static void Test(int[] num, out int max, out int min, out int sum, out int avg){max = num[0]; min = num[1]; sum = 0; //out参数已经声明,不能再次声明,但必须赋值.for (int i = 0; i < num.Length; i++){if (num[i] > max) { max = num[i]; }if (num[i] < min) { min = num[i]; }sum += num[i];//总和}avg = sum / num.Length;// 无需再写return,这就是out返回多参数的优点}

        提示登陆

        private static void Main(string[] args){Console.WriteLine("请输入用户名:"); string user = Console.ReadLine();Console.WriteLine("请输入密码:"); string password = Console.ReadLine();LandState(user, password, out string state);//可以out中声明Console.WriteLine(state);Console.ReadKey();}public static void LandState(string user, string password, out string state){if (user == "admin" && password != "8888") state = "密码错误";else if (user != "admin" && password == "8888") state = "用户名错误";else if (user == "admin" && password == "8888") state = "登录成功";else state = "登陆错误"; // 一条语句可省略{}}

         下面的正则写法(bool与ourt中的stirng,不同类型)        

        public static bool LandState(string user, string password, out string state){if (user == "admin" && password != "8888"){state = "密码错误";return false;}else if (user != "admin" && password == "8888"){state = "用户名错误";return false;}else if (user == "admin" && password == "8888"){state = "登录成功";return true;}else{state = "登陆错误"; // 一条语句可省略{}return false;}}

        注:int.Tryparse("3333",out n)
            将字串转为整形:成功返回true,n为整数;失败返回false,n为0.
            实际上这个也是用了out参数调用,在方法中用了try-catch进行捕获赋值.
    
    2.ref 引用传参
        能将变量带入方法中,并接受其中的变化。类似于指向内存地址的指针,
        所以变量在内存必须分配空间,故在使用ref调用前必须赋值,out则不必但在方法内赋值.
        注意:尽管类似指针,但不是指针值,还是实际的数,其中的指向由vs自己指定        

        private static void Main(string[] args){double a = 500, b = 500;RefTest(ref a);//加了ref表示指针引用,可以带回主函数Test(b);//Test方法中的b无法带回到主函数Console.WriteLine("{0},{1} ", a, b);//502,500Console.ReadKey();}public static void RefTest(ref double a)//引用{a += 2;}public static void Test(double b){b += 1;}

        不借助第三变量,交换两个数:

            int a = 10, b = 20, temp;a = b + (b = a) * 0;//(b=a)先b=a,再返回b,即先b=10,返回整体10.(a, b) = (b, a);//元组tuplea = a ^ b;//异或b = a ^ b;a = a ^ b;a = a + b;//和值b = a - b;a = a - b;a = a - b;//差值b = a + b;a = a - b;

    3.params 把实参序列组成形参中的长度可变数组.params必须只能在参数最后.
        这样让实参序列可长可短。由此可知参数中最有只能有一个可变参数.

        private static void Main(string[] args){int[] n = { 1, 3, 4, 5, 6 }; //无params时需要用此句为实参GetSum("大王", n);//也可直接传数组GetSum("张三", 88, 22, 99);GetSum("李四", 22, 33, 44, 5, 66, 77, 8);//最后长度可变Console.ReadKey();}public static void GetSum(string name, params int[] n){//params把后继的序列作了数组n的元素,故params必须在形参最后int sum = 0;for (int i = 0; i < n.Length; i++) sum += n[i];//仅一句时也可不用{}Console.WriteLine("{0}的总成绩为{1}", name, sum);}


      
三、方法的重载
    方法的名称相同,但参数不同。
    避免同样的方法,使用不同的方法,把调用时统一起来.
    
    参数不同的情况:
    1.参数个数相同,类型不差异;
    2.参数类型相同,个数不能相同.
      注:方法的返回值与重载没有关系。

        private static void Main(string[] args){int a = 1, b = 2;double c = 1.1, d = 1.2;Console.WriteLine(GetPlug(a, b));Console.WriteLine(GetPlug(c,d));Console.ReadKey();}public static int GetPlug(int a, int b){ return a + b; }public static double GetPlug(double a, double b){ return a + b; }public static string GetPlug(string a, string b){ return a + b; }public static int GetPlug(int a, int b, int c){ return a + b + c; }


    
四、方法的递归
        方法自己调用自己,必须有终点。
        例如用静态来计数判断终点。

相关文章:

(7)C#传智:方法及参数、重载(第7天)

一、方法作用域 被调用者需要调用者的值,方法有二: 1.传参数. private static void Main(string[] args){int m 3;Console.WriteLine(m);Console.ReadKey();}public static int GetMax(int m){return m 3;} 2.使用静态字段模拟全局. 多个方法都需要时&#x…...

Python 函数式编程

函数式编程&#xff1a;允许把函数本身作为参数传入另一个函数&#xff0c;还允许返回一个函数&#xff01; 1.高阶函数 一个函数可以接收另一个函数作为参数&#xff0c;这种函数称之为高阶函数 abs(-10) 是函数调用 abs是函数本身 abs函数名其实是一个变量名 变量可以…...

pandas读取EXCEL列名重复问题解决——pandas设置多行为列名(多层列名)

问题呈现 这是我在问答区看到的一个问题。 问&#xff1a;在python中使用pandas读取Excel数据&#xff0c;重复数据被区分了&#xff0c;如何做到重复数据不被区分&#xff1f; 解决思路 很明显&#xff0c;这是pandas读取excel文件时列名设置问题&#xff0c;我第一时间想…...

CMake常用语法

1. cmake_minimum_required(VERSION 3.4.1) 指定需要的最小的cmake版本 2. aux_source_directory 查找源文件并保存到相应的变量中: #查找当前目录下所有源文件并保存至SRC_LIST变量中 aux_source_directory(. SRC_LIST)3. add_library 3.1 添加一个库 add_library(<n…...

Java知识复习(一)基础知识

1、什么是JVM、JDK和JRE&#xff1f; JVM是指运行Java字节码的虚拟机。而字节码文件指的就是扩展名为.class的文件&#xff0c;JDK指功能齐全的Java SDK&#xff0c;能够创建和编译程序JRE指Java运行的环境&#xff0c;包括JVM、类库和命令等 2、重载和重写的主要区别 重载&…...

springboot+vue.js校园车辆用车预约管理系统

springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是目前最火热的java开发框架 前端技术&#xff1a;nodejsvueelementui本项目的应用场景描述如下&…...

【 K8s 源码之调度学习】Pod 间亲和性和反亲和性的源码分析

查看案例 字段含义podAffinityPod 间的亲和性定义podAntiAffinityPod 间的反亲和性定义requiredDuringSchedulingIgnoredDuringExecution硬性要求&#xff0c;必须满足条件&#xff0c;保证分散部署的效果最好使用用此方式preferredDuringSchedulingIgnoredDuringExecution软性…...

计及绿证交易及碳排放的含智能楼宇微网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

场景扩展,体验升级 | DBMotion新增无公网数据库迁移、支持监控报警等多项功能

丝滑的零停机数据库在线迁移工具——DBMotion&#xff0c;又双叒叕发新版&#xff1a;新增的网关、数据源功能&#xff0c;让你无公网IP的数据库也可以迁移&#xff1b;新增的监控功能&#xff0c;让你对迁移性能一目了然&#xff1b;新增的报警功能&#xff0c;让你及时获得同…...

【正点原子FPGA连载】第十五章eMMC读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十五章eMMC读写…...

i2c子系统

i2c 硬件协议 Linux 应用层读写i2c 数据 在Linux系统上&#xff0c;不仅可以在内核中使用 i2c 总线发送、接收数据&#xff0c;同时也支持应用层使用i2c 总线发送、接收。 如果在内核中使能了drivers/i2c/i2c-dev.c 配置&#xff0c;内核就会为每一个i2c 控制器生成一个/dev/…...

【K3s】第17篇 Helm版本和支持的Kubernetes版本对照表

目录 Helm版本和支持的Kubernetes版本对照表 Helm版本和支持的Kubernetes版本对照表 描述了在Helm和Kubernetes之间支持的最大版本偏差。 Helm的版本用 x.y.z 描述&#xff0c;x是主版本&#xff0c;y是次版本&#xff0c;z是补丁版本。 当一个Helm的新版本发布时&#xff0…...

如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai

如何自己搭建一个ai画图系统&#xff1f; 从0开始云服务器部署novelai ​ 上面两张图都是通过ai生成的&#xff0c;是不是有以假乱真的感觉。 本教程提供的是自己搭建一个可以外网访问的ai系统的方法&#xff0c;需要采购gpu服务器&#xff08;后续会出白嫖的方式&#xff09;&…...

SpringSecurity过滤请求导致的系统bug

背景 今天开发一个新的会员管理系统&#xff0c;继承了SpringSecurity的&#xff0c;用以控制权限。结果无论怎么配置&#xff0c;都会报错&#xff1a;An Authentication object was not found in the SecurityContext 这句话的意思很明确&#xff1a;指的就是在SecurityCon…...

css\js\vue知识点

1.css3新特性 css3新特性 1&#xff09;选择器 2&#xff09;阴影 3&#xff09;形状转换&#xff08;2D <-> 3D&#xff09; 4&#xff09;变形 5&#xff09;动画&#xff08;过渡动画、帧动画&#xff09; 6&#xff09;边框 7&#xff09;多重背景 8&#xff09;反…...

在vue项目中使用video.js实现视频播放和视频进度条打点

一、用video.js实现视频播放 1、安装video.js插件 // 安装video.js插件 npm install video.js -S // 如果需要播放rtmp直播流&#xff0c;需安装一下插件 npm install videojs-flash -S 2、在组件代码里使用 <template><div data-vjs-player><video ref&quo…...

【代码训练营】day41 | 01背包问题 416. 分割等和子集

所用代码 java 01背包理论 背包最大重量为&#xff1a;4 重量价值物品0115物品1320物品2430 暴力&#xff1a;O(2^n) 动态规划&#xff1a; 1、二维dp数组 dp[i] [j] dp数组含义&#xff1a;[0, i]物品&#xff0c;任取放进容量为j的背包里的最大价值 递推公式&#xff1a…...

linux网络编程-多进程实现TCP并发服务器

服务端流程步骤socket函数创建监听套接字lfdbind函数将监听套接字绑定ip和端口listen函数设置服务器为被动监听状态&#xff0c;同时创建一条未完成连接队列&#xff08;没走完tcp三次握手流程的连接&#xff09;&#xff0c;和一条已完成连接队列&#xff08;已完成tcp三次握手…...

C语言的学习小结——数组

一、一维数组的创建与初始化 1、格式&#xff1a; type_t arr_name[const_n];//type_t 是指数组的元素类型 //const_n 是一个常量表达式&#xff0c;用来指定数组的大小 注&#xff1a; 数组是使用下标来访问的&#xff0c;下标从0开始。 数组的大小可以通过计算得到&…...

HTB-Photobomb

HTB-Photobomb信息收集开机提权对于问题的思考信息收集 端口扫描 目标首页 有一个http Authorization 目录扫描 在查看源码的时候发现了一个js文件。 并且发现了访问不存在的目录会出现错误提示。 通过搜索得知 Sinatra 是一个基于 Ruby 语言的 DSL&#xff08;领域…...

从 0 到 1 搭建 RuoyiOffice:30 分钟跑通后端+前端+移动端

从 0 到 1 搭建 RuoyiOffice&#xff1a;30 分钟跑通后端前端移动端 &#x1f310; 演示地址&#xff1a;http://ruoyioffice.com | &#x1f4e6; 源码1&#xff1a;https://gitcode.com/zhouzhongyan/ruoyi-office-vben.git | &#x1f4e6; 源码2&#xff1a;https://gitcod…...

文献速吞兽:基于LangChain的论文辅助阅读智能体系统设计与实现

&#x1f9d1;‍&#x1f4bb; 博主介绍 & 诚邀关注 作者&#xff1a;专注于 Java、Python、前端开发的技术博主 | 全网粉丝 30 万 在校期间协助导师完成毕业设计课题分类、论文格式初审及代码整理工作&#xff1b;工作后持续分享毕设思路&#xff0c;助力毕业生顺利完成…...

机器学习生产化:从Notebook到可运维ML服务的实战路径

1. 项目概述&#xff1a;当模型走出笔记本&#xff0c;真正开始“呼吸”现实空气 你有没有经历过这样的时刻&#xff1a;Jupyter Notebook里所有指标都闪闪发亮&#xff0c;AUC 0.92&#xff0c;F1 0.87&#xff0c;交叉验证稳如泰山&#xff1b;业务方点头签字&#xff0c;上线…...

为什么92%的团队仍在手写API文档?ChatGPT驱动的智能生成方案已上线,你还在等什么?

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;API文档手写困局的根源与行业现状 在现代微服务与云原生架构普及的背景下&#xff0c;API已成为系统间协作的核心契约。然而&#xff0c;大量团队仍依赖人工编写和维护 OpenAPI&#xff08;Swagger&#xff0…...

RabbitMQ 入门与安装

RabbitMQ 入门与安装&#xff1a;从 MQ 概念到环境搭建 一、开篇&#xff1a;学习 RabbitMQ 前需要准备什么 RabbitMQ 属于消息中间件&#xff0c;是 Java 后端开发中非常常见的一类基础组件。学习它之前&#xff0c;最好已经具备以下基础&#xff1a; 具备一定 Java 基础&…...

Codeforces Round 1055

codeforces1055实况 https://www.bilibili.com/video/BV1MdxnzdErn/ Codeforces-1055 jiangly 许淇文 StarSilk tourist 王茂骅 排名演变 https://www.bilibili.com/video/BV1CyxJz5EBB/ Codeforces Round 1055 (Div. 12) A~E 思路代码讲解 https://www.bilibili.com/video/BV1…...

NotebookLM显著性判断失效真相:92%用户忽略的3个统计学前提及实时校验脚本

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM显著性判断失效的典型现象与影响评估 NotebookLM 在处理多源异构文档时&#xff0c;其内置的“显著性判断”模块&#xff08;Significance Scorer&#xff09;常因语义稀疏、上下文截断或引用锚点偏…...

告别应用层延时!在迅为RK3568开发板上,将RS485收发切换彻底交给Linux内核驱动

告别应用层延时&#xff01;在迅为RK3568开发板上将RS485收发切换彻底交给Linux内核驱动 工业自动化领域对通信实时性的要求近乎苛刻&#xff0c;当RS485总线上挂载的多个设备响应时间参差不齐时&#xff0c;应用层手动控制的收发切换就像用机械表校准原子钟——看似可行实则漏…...

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装详细指南

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装详细指南。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

为什么你的学术论文需要APA第7版样式表?3分钟解决Word格式难题

为什么你的学术论文需要APA第7版样式表&#xff1f;3分钟解决Word格式难题 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 作为一名学术研究者或学生&a…...