C#语言入门详解 --- 方法(含传值 输出 引用 数组)

方法

方法标准式


<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
   Method Body
}

让我们逐一对每一个模块进行解释:

  • Access Specifier:访问修饰符,这决定了接下来的主题的可见性,包含public,private...
  • Return type:主体的返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果不返回任何值,则返回类型为 void
  • Method name:本次定义的方法的名称。
  • Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。
  • Method body:方法主体,包含了完成任务所需的指令集。

方法的调用顺序为,先讲方法所属的对象进行实例化,然后使用方法名进行调用。

举例:

using System;
namespace test
{
	class test
	{
		public int compare(int a,int b)
		{
			int result;
			if (a > b)
				result = a;
			else
				result = b;
			
			return result;
		}
		
		static void Main()
		{
			int a = 100;
			int b = 120;
			test Study = new test();
			int result = Study.compare(a,b);
			Console.WriteLine(result);
		}
	}

}

方法参数

传值参数

这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。

定义形式为不带任何修饰符的参数,在方法体中调用不会影响主程序中实参,因为并未对实参储存位置进行操作。

using System;
namespace test
{
	class test
	{
		public void swap(int a,int b)
		{
			int temp = a;
			a = b;
			b = temp;
		}
		
		static void Main()
		{
			int a = 100;
			int b = 120;
			test Study = new test();
			Console.WriteLine(a);
			Study.swap(a,b);
			Console.WriteLine(a);
		}
	}
}

我们在test类中定义了一个交换函数,通过调用想要将a,b的值进行交换,让我们将上述代码运行后发现,两次输出a的值都为100,并没有将函数swap并没有将主函数中a,b的值交换。

引用参数

这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。

声明引用参数时需要携带修饰符ref,调用时也需要对传入的参数携带修饰符ref;

引用参数的储存位置就是实参的储存位置,相当于方法调用时,将实参的储存位置赋给了函数的形参中。

using System;
namespace test
{
	class test
	{
		public void swap(ref int a,ref int b)
		{
			int num = a;
			a = b;
			b = num;
		}
		
		static void Main()
		{
			int a = 100;
			int b = 120;
			test Study = new test();
			Console.WriteLine(a);
			Study.swap(ref a,ref b);
			Console.WriteLine(a);
		}
	}
}

输出参数

这种方式可以返回多个值。其目的在于返回一个数值,而不是为了改变。

return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己

using System;
namespace test
{
	class test
	{
		public void input(out int x)
		{
			int num = 100;
			x = num;
		}
		
		static void Main()
		{
			int a = 500;
			test Study = new test();
			Study.input(out a);
			Console.WriteLine(a);
		}
	}
}

数组参数

数组参数的定义传值参数类似,但必须是形参列表中的最后一个,使用params进行修饰

using System;
namespace test
{
	class Program
	{
		static int Qiuhe(params int[] intArray)
		{
			int sum = 0;
			foreach (var item in intArray)
			{
				sum += item;
			}
			
			return sum;
		}
		
		static void Main()
		{
			int[] a = new int[] {1,2,3};
			int num = Qiuhe(a); //静态类型不能通过实例类型进行访问
            int result = Quite(1,2,3,4,5,6);
			Console.WriteLine(num);
		}
	}
}
using System;
namespace test
{
	class Program
	{
		static void Express(params string[] strArray)
		{
			foreach (var item in strArray)
			{
				Console.WriteLine(item);
			}
		}
		
		static void Main()
		{
			string str = "TIM;TOM;AMY";
			string[] result = str.Split(';',';');
			Express(result);	
		}
	}
}

具名参数&可选参数

具名参数:

对于其他方法严格要求形参带入的位置,通过使用具名参数可以无视参数传递的顺序。

using System;
namespace test
{
	class Program
	{
		static void swap(int a,int b)
		{
			Console.WriteLine(a);
			Console.WriteLine(b);
		}
		
		static void Main()
		{
			int a = 100;
			int b = 200;
			swap(a:b,b:a);
		}
	}
}

可选参数:

参数因为具有“默认值”而使得可选。

using System;
namespace test
{
	class Program
	{
		static void swap(int a = 200,int b = 100)
		{
			Console.WriteLine(a);
			Console.WriteLine(b);
		}
		
		static void Main()
		{
			swap(); //具有默认值可以直接使用函数而不需要传参
		}
	}
}

扩展方法(this 参数)

方法必须是公有且静态,public static进行修饰

必需是形参列表中的第一个,由this修饰

using System;
using System.Collections.Generic;
namespace test
{
	class Program
	{
		static void Main()
		{
			double x = 3.14;
			double y = x.Round(4);
			Console.WriteLine(y);
		}
	
	}
	
	static class DoubleExtension
	{
		public static double Round(this double input,int digits)
		{
			double result = Math.Round(input,digits);
			return result;
		}
	}
	
}

参考资料

-《C#图解教程》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版 在开始参数配置之前,先执行以下脚本 python copy_config_example.py该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对…

20个超实用的VS Code扩展(2024年版)

大家好&#xff0c;今天小程给大家带来一篇关于 VS Code 扩展的文章。VS Code 这几年做得是风生水起&#xff0c;可以算得上是微软的良心产品&#xff0c;其最大的优势就是拥有众多高质量的扩展。在本文中&#xff0c;将向大家推荐一些我认为在 2024 年对开发者来说又实用又好用…

GPT_AI高速发展中什么是Prompt提示词?

提示词&#xff08;Prompt&#xff09;是给大语言模型&#xff08;以下简称模型&#xff09;的输入文本&#xff0c;用于指定模型应该执行什么样的任务并生成什么样的输出。 提示词发挥了“提示” 模型 应该做什么的作用。设计高质量的提示词需要根据目标任务和模型能力进行精…

动态 ETL 管道:使用非结构化 IO 将 AI 与 MinIO 和 Weaviate 的 Web

在现代数据驱动的环境中&#xff0c;网络是一个无穷无尽的信息来源&#xff0c;为洞察力和创新提供了巨大的潜力。然而&#xff0c;挑战在于提取、构建和分析这片浩瀚的数据海洋&#xff0c;使其具有可操作性。这就是Unstructured-IO 的创新&#xff0c;结合MinIO的对象存储和W…

hadoop搭建本地hive库保姆级教程

安装本地hive 安装的前提是hadoop完全分布式可以正常的跑起来 第一部分&#xff1a;安装mysql8.0 1.安装wget工具 yum -y install wget2.通过wget工具下载mysql源文件 注意&#xff1a;以下版本过高&#xff0c;后面安装MySQL源会失败&#xff0c;所以建议刚开始尝试换成…

Python 五子棋游戏(人人对战人机对战)【含Python源码 MX_006期】

系统简介&#xff1a; 五子棋是一种双人对弈的策略棋类游戏&#xff0c;玩家轮流在棋盘上落子&#xff0c;目标是通过在水平、垂直或对角线上连成一条直线的方式&#xff0c;最先在棋盘上形成连续的五颗棋子。五子棋的规则相对简单&#xff0c;但是需要玩家在落子过程中进行深思…

python14 字典类型

字典类型 键值对方式&#xff0c;可变数据类型&#xff0c;所以有增删改功能 声明方式1 {} 大括号&#xff0c;示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目&#xff0c;AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法&#xff0c;但却苦于没有强大的专业背景和雄厚资金支撑&#xff0c;只能在局外徘徊&#xff0c;而这恰恰为数字人源码公司推出的数字人源码部署服务的火…

第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录 1.Ceph集群使用RBD块存储与K8S集成简介2.Ceph集群RBD块存储与K8S Volume集成2.1.在Ceph集群中创建K8S集群使用的块存储2.2.创建用于K8S访问Ceph RBD块设备的认证用户2.3.将认证用户的Key存储在K8S Secret资源中2.4.在K8S集群的所有节点中安装Ceph命令2.5.创建Pod资源使…

基于粒子群优化算法的的微电网多目标优化调度----算法改进

前言&#xff1a; 当阅读过前一篇我的博客之后&#xff0c;并且认真去读懂了那篇文章末尾的代码&#xff0c;那么&#xff0c;后续的算法改进对于你来说应当是很容易的了。前文中提及过&#xff0c;粒子群在进行迭代时&#xff0c;每迭代一次&#xff0c;都会根据自己个体最优值…

JAVA小知识22:迭代器iterator与列表迭代器ListIterator

一、迭代器 在 Java 中&#xff0c;迭代器是一个设计模式&#xff0c;用于遍历集合中的元素。Java 提供了 Iterator 接口来实现这一功能。迭代器的主要作用是提供一种通用的遍历集合的方法&#xff0c;而不需要了解集合的具体实现细节。 1.1、迭代器的特点 统一接口&#xf…

MySQL中实现行列转换的示例

在 MySQL 中进行行列转换&#xff08;即&#xff0c;将某些列转换为行或将某些行转换为列&#xff09;通常涉及使用条件逻辑和聚合函数。虽然 MySQL 没有像 Oracle/SQL Server 中的 PIVOT 和 UNPIVOT 那样的直接功能&#xff0c;但你可以通过结合 CASE 语句、UNION 或 UNION AL…

Linux下Shell脚本基础知识

主要参考视频&#xff1a; 这可能是B站讲的最好的Linux Shell脚本教程&#xff0c;3h打通Linux-shell全套教程&#xff0c;从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档&#xff1a; Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…

银行数仓项目实战(一)--什么是数据仓库

文章目录 数据仓库特点目的&#xff1a;监管报送监管报送的系统主要有&#xff1f;监管报送报送的数据 OLTP和OLAP 架构 数据仓库 数据仓库是一个面向主题的&#xff0c;集成的&#xff0c;非易失的且随时间变化的数据集合&#xff0c;用来支持管理人员的决策。 数据仓库是一个…

采集罗克韦尔AB、西门子等PLC数据发布成HTTP接口

智能网关IGT-DSER集成了多种PLC的原厂协议&#xff0c;方便实现各种PLC的原厂协议转换为HTTP协议的服务端&#xff0c;通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;即可接收来自客户端的GET、PUT和POST命令&#xff0c;解析和打包JSON文件(JSON文件格…

两个链表合并升序-链表题

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 非递归 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 nullptr && list2 ! nullptr)return list2;if(list2 nullptr && list1 ! nullptr)re…

电子传真怎么在国产系统上使用?一文看懂网络传真信创方案

国产化浪潮正在逐步深入&#xff0c;越来越多的企业开始关注如何在国产系统上高效、安全地使用办公软件&#xff0c;电子传真系统也不例外。 作为网络电子传真领域的重要品牌&#xff0c;EastFax也对原Windows电子传真系统进行了信创改造&#xff0c;全面支持国产化操作系统、…

取证工作: SysTools SQL Log Analyzer, 完整的 SQL Server 日志取证分析

天津鸿萌科贸发展有限公司是 Systools 系列软件的授权代理商。 SysTools SQL Log Analyzer 是 Systools 取证工具系列之一&#xff0c;用于调查 SQL Server 事务日志&#xff0c;以对数据库篡改进行取证分析。 什么是 SQL Server 事务日志&#xff1f; 在深入研究 SQL 事务日…

【工作】计算机行业相关的十六类工作简介

本文简单介绍了计算机行业相关的工作类别&#xff0c;共16种&#xff0c;包括常见招聘要求与平均工资。平均工资信息来源&#xff1a;米国企业点评职场社区glassdoor&#xff08;https://www.glassdoor.com/index.htm&#xff09; &#xff08;一&#xff09;软件工程师 软件…

【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、图数据及其应用场景1.1 图数据的定义和特征1.2 常见的图数据结构1.2.1 社交网络1.2.2 知识图谱1.2.3 分子结构1.2.4 交通网络 1.3 图数据在不同领域的应用实例1.3.1 社交网络中的推荐系统1.3.2 知识图谱中的信息检索…
最新文章