c# 多种值传地的方法

1. 一般值方式传入

先上代码:

using System;
namespace test
{
	class Program
	{
		public static void PrintInfo(string name,int age, int score)
		{
			Console.WriteLine(@"姓名:{0}, 年龄:{1},成绩:{2}", name, age, score);
		}
		static void Main(string[] args)
		{
			string strName = @"张三";
			int iAge = 12;
			int iScore = 98; 
			PrintInfo(strName,12,98)
			Console.ReadLine();
		}		
	}
}

**特点:**事先定义变量,通过将变量传入到调用的方法名.

3. 键:值形式传入

先上代码:

using System;
namespace test
{
	class Program
	{
		public static void PrintInfo(string name,int age, int score)
		{
			Console.WriteLine(@"姓名:{0}, 年龄:{1},成绩:{2}", name, age, score);
		}
		static void Main(string[] args)
		{
			// 输入参数顺序可以和方法的参数顺序不一致
			PrintInfo(name:@"张三",age:12,score:98);
			Console.ReadLine();
		}		
	}
}

**特点:**不需要定义变量,但传入的key与方法的参数名一致,value与方法参数定义的类型一致,参数的顺序可以和方法的参数顺序不一致。

5. 函数中预设默认值

先上代码:

using System;
namespace test
{
	class Program
	{
		public static void PrintInfo(string name,int age = 12, int score = 98)
		{
			Console.WriteLine(@"姓名:{0}, 年龄:{1},成绩:{2}", name, age, score);
		}
		static void Main(string[] args)
		{
			string strName = @"张三";
			PrintInfo(strName);
			PrintInfo(name:@"张三");
			PrintInfo(name:@"张三",age:12,score:98);
			Console.ReadKey();
		}		
	}
}

**特点:**当传入的参数省略时,方法体使用默认参数值(注意:方法定义默认值的参数放在最后,多个默认值参数中间不能有非默认值的参数)
6. 不定个数的参数传入
先上代码:

using System;
namespace test
{
	class Program
	{
		//不带固定参数的可变参数
		public static void PrintInfo(params int[] list)
		{
			foreach (var item in list) 
			{
				Console.WriteLine(item);
			}
		}
		//带固定参数的可变参数
		public static void PrintInfo(string name,params int[] list)
		{
			foreach (var item in list) 
			{
				Console.WriteLine($"Name:{name}, 数值:{item}");
				// 细看 $ @ ?? ? 的用法
			}
		}
		static void Main(string[] args)
		{
			PrintInfo("幸运",1,2,3);
			/* 输入:
			 * Name:幸运, 数值:1
			 * Name:幸运, 数值:2
			 * Name:幸运, 数值:3
			 */
			PrintInfo("幸运",new int[] {1,2,3,4});
			/* 输入:
			 * Name:幸运, 数值:1
			 * Name:幸运, 数值:2
			 * Name:幸运, 数值:3
			 * Name:幸运, 数值:4
			 */
			Console.Read();
		}		
	}
}

特点:

  • 参数数组必须是一维数组。
  • 不允许将params修饰符与ref和out修饰符组合起来使用, 且一个方法只允许有一个params修饰的参数,并且只能放在方法的最后一个参数 。
  • 与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量。
  • 若实参是数组则按引用传递,若实参是变量或表达式则按值传递。
  • 用法:可变的方法参数,也称数组型参数,适合于方法的参数个数不知的情况,用于传递大量的数组集合参数;当使用数组参数时,可通过使用params关键字在形参表中指定多种方法参数,并在方法的参数表中指定一个数组。

ref 关键字使参数按引用传递

using System;
namespace test
{
	class Program
	{
		//不带固定参数的可变参数
		internal static void Method(ref int i)
		{
			i = 44;
		}
		
		static void Main(string[] args)
		{
			int val = 0; // 必须先被始化
			Method(ref val); // 必须显式使用 ref 关键字
			console.WriteLine("val 的值是 " + val.toString());
			// val is now 44
			Console.Read();
		}		
	}
}

ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

out 关键字会导致参数通过引用来传递

using System;
namespace test
{
	class Program
	{
		//不带固定参数的可变参数
		internal static void Method(out int i)
		{
			i = 44;
		}
		
		static void Main(string[] args)
		{
			int val; // 必须先被始化
			Method(out val); // 必须显式使用 out 关键字
			console.WriteLine("val 的值是 " + val.toString());
			// val is now 44
			Console.Read();
		}		
	}
}

out和ref之间的区别

  • 首先:两者都是按地址传递的,使用后都将改变原来参数的数值。
  • 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值