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

news2024/10/7 11:20:35

方法

方法标准式


<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.coloradmin.cn/o/1830616.html

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

相关文章

在微信公众号上怎么添加预定房间功能

在这个快节奏的现代社会&#xff0c;人们对于便捷与高效的需求日益增加。特别是在旅行或出差时&#xff0c;能够快速、方便地预订一间舒适的房间&#xff0c;无疑是每个人心中的小确幸。今天&#xff0c;我们为您带来了一项革命性的服务——微信公众号上的房间预定功能&#xf…

QQ登录测试用例

QQ登录测试用例 常见测试方法&#xff08;可参考软件测试<用例篇>&#xff09; 等价类&#xff1a; 1、有效等价类 &#xff1a;满足需求的数据集合 2、无效等价类&#xff1a;不满足需求的数据集合 边界值错误猜测法场景法 QQ测试用例设计&#xff1a;xmind 需要完整…

位运算算法:编程世界中的魔法符号

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 常见位运算总结 二、常见位运算题目 2.1 位1的个数 2.2 比特数记位&#xff08;典型dp&#xff09; 2.3 汉明距离 2.4 只出现一次的数字&#xff08;1&#xff09; 2.5 只出…

JavaScript-事件监听

添加事件监听 语法&#xff1a;对象名.addEventListener(事件类型,要执行的函数) 作用&#xff1a;当事件触发时&#xff0c;就调用这个函数 事件类型&#xff1a;比如用鼠标点击&#xff0c;或用滚轮滑动&#xff0c;鼠标经过这些 要执行的函数&#xff1a;要做的事 &l…

区区微服务,何足挂齿?

背景 睿哥前天吩咐我去了解一下微服务&#xff0c;我本来想周末看的&#xff0c;结果周末没带电脑&#xff0c;所以只能周一看了。刚刚我就去慕课网看了相关的视频&#xff0c;然后写一篇文章总结一下。这篇文章算是基础理论版&#xff0c;等我之后进行更多的实践&#xff0c;…

【无标题】Pycharm执行报错

file 读取未指定utf-8编码&#xff0c;加上就好了 疑问&#xff1a;为什么 有的电脑可以直接跑呢&#xff1f;该电脑、Pycharm、工程&#xff0c;已经做了修改设置默认值&#xff0c;但是到新的电脑上&#xff0c;就需要重新设置&#xff0c;所以 file 读、写&#xff0c;最好…

[Shell编程学习路线]——if条件语句(单,双,多分支结构)详细语法介绍

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月17日7点50分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— &#x1f4af;趣站&#x1f4af…

【NOI】C++程序结构入门之循环结构四——带余除法

文章目录 前言一、带余除法1.1 概念1.2 编程中的使用1.2.1 模运算1.2.2 判断奇偶性1.2.3 判断倍数关系1.2.4 循环和迭代控制1.2.5 密码学与安全1.2.6 算法设计1.2.7 数据验证与错误处理 二、例题讲解问题&#xff1a;1389 - 数据分析问题&#xff1a;1750 - 有0的数问题&#x…

宕机了, redis如何保证数据不丢?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

IDEA快速入门03-代码头统一配置

三、代码规范配置 3.1 文件头和作者信息 配置入口&#xff1a;依次打开 File -> Settings -> Editor -> File and Code Templates。 Class /*** Copyright (C) 2020-${YEAR}, Glodon Digital Supplier & Purchaser BU.* * All Rights Reserved.*/ #if (${PACKA…

基于SSM+Jsp的旅游景点线路网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

在线求助:什么!!我的单链表只能得30分!!

题目&#xff1a; 来源&#xff1a; B3631 单向链表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我的代码 输入输出&#xff1a; 输入 6 1 1 99 1 99 50 1 99 75 2 99 3 75 2 1 输出 75 99 我的测试结果&#xff1a;

JAVA---类和对象详解(1)

JAVA类和对象详解(1) 1.面向对象的初步认知 1.1什么是面向对象? Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成…

VSCode的maven插件配置问题

最近尝试使用VSCode开发java后台项目&#xff0c;发现安装了java开发套件的插件 配置了开发环境之后&#xff0c;maven下载的依赖包始终位于~/.m2/repository目录之后&#xff0c;放在了默认的C盘&#xff0c;这就是我最不喜欢的位置。 为了保证C的小&#xff0c;所以需要修改…

物联网工程的未来发展趋势及影响

物联网工程是在互联网基础上的一种新兴技术&#xff0c;其核心思想是通过网络连接不同物体&#xff0c;实现智能化的交流与互动。在未来&#xff0c;物联网工程将继续向更多领域发展&#xff0c;如智能家居、智能城市、智能交通等。首先&#xff0c;物联网工程在智能家居领域的…

《Windows API每日一练》4.3 点和线的绘制

理论上&#xff0c;所有的图形设备驱动程序所需要的就是SetPixel函数和GetPixel函数。其余的一切都可以使用在GDI模块中实现的更高层的例程来处理。例如&#xff0c;画一条线&#xff0c;GDI可以不停地调整x和y坐标&#xff0c;然后连续调用多次SetPixel函数来实现。 事实上&a…

[vue3]组件通信

自定义属性 父组件中给子组件绑定属性, 传递数据给子组件, 子组件通过props选项接收数据 props传递的数据, 在模版中可以直接使用{{ message }}, 在逻辑中使用props.message defineProps defineProps是编译器宏函数, 就是一个编译阶段的标识, 实际编译器解析时, 遇到后会进行…

LogicFlow 学习笔记——9. LogicFlow 进阶 节点

LogicFlow 进阶 节点&#xff08;Node&#xff09; 连线规则 在某些时候&#xff0c;我们可能需要控制边的连接方式&#xff0c;比如开始节点不能被其他节点连接、结束节点不能连接其他节点、用户节点后面必须是判断节点等&#xff0c;想要达到这种效果&#xff0c;我们需要为…

腾讯地图避坑-获取地图点击点的经纬度

map.on(click,(evt)>{console.log("evt",evt)let lat evt.latLng.getLat();//lat 获取let lng evt.latLng.getLng();//lng 获取console.log("evt.latLng-有效方式",evt.latLng)console.log("evt[latlng]-无效方式",evt[latlng])})

docker容器基本原理简介

一、docker容器实例运行的在linux上是一个进程 1&#xff09;、我们通过docker run 通过镜像运行启动的在linux上其实是一个进程&#xff0c;例如我们通过命令运行一个redis&#xff1a; docker run -d --name myredis redis2&#xff09;、可以看到首先我们本地还没有redis镜…