---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
一、方法是类中用于计算或完成某种功能的成员;只能在结构或类中定义。
类中的方法声明格式:
方法修饰符 返回类型 方法名 (形参列表){方法体}
二、方法中参数的传递
1、值参数的传递
值参数的传递实际相当于实参给形参复制了一份值,这样实参的值就不会改变。例如下面的例子:
class Program
{
static void Main(string[] args)
{
int num1 = 10;
int num2 = 20;
Console.WriteLine(Add(num1, num2));//调用方法加后的结果
Console.WriteLine("实参num1的值为:"+num1); //打印实参num1和num2的值
Console.WriteLine("实参num2的值为:"+num2);
Console.ReadKey();
}
/// <summary>
/// 一个值传递参数的方法
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
public static int Add(int num3,int num4)
{
num3 = 30; //改变形参的值,以方便对比形参和实参的值的变化
num4 = 40;
Console.WriteLine("形参num3的值为:" + num3);
Console.WriteLine("形参num4的值为:" + num4);
return num3 + num4;
}
}
从上面的例子中可以看出,无论怎么改变形参的值,实参的值都不会发生改变。这样就能确保实参的值的安全。
2、引用参数,以ref修饰符声明 输出参数 以out修饰符修饰
某种情况下,在类的方法中我们有时需要修改方法外部的值,这时候我们就必须得到外部参数的实际地址,然后在方法中通过此地址来修改其值。
或者为了把方法的运算结果保存到外部变量,就得知道外部变量的引用。这时用out修饰符,在方法返回后,传递的变量认为已被赋值。
ref和out区别在与: ref必须在传递参数前赋值,out则是不需要传递前赋值,但在方法中必须为其赋值
例子:
class Program
{
static void Main(string[] args)
{
int num1 = 4; //使用ref修饰符必须给其先在外部赋值
int num2 = 6;
Console.WriteLine(Add(ref num1, ref num2));
Console.WriteLine("修改后的num1的值为:" + num1);
Console.WriteLine("修改后的num2的值为:" + num2);
Console.ReadKey();
}
public static int Add( ref int num3, ref int num4)
{
num3 = 10; //实际在修改num1的值
num4 = 20; //实际在修改num2的值
return num3+num4;
}
}
通过此例可以看到在方法的内部可以改变外部的值,num1和num2的值全部被修改。
out修饰符例子:
class Program
{
static void Main(string[] args)
{
int num1; //out修饰符在外部可以不用给变量赋值
int num2;
Add(out num1,out num2);
Console.WriteLine("num1的值:"+num1);
Console.WriteLine("num2的值:" + num2);
Console.ReadKey();
}
public static int Add( out int num3, out int num4)
{
num3 = 1; //必须给num3和num4在方法里面赋值
num4 = 2;
return num3 + num4;
}
}
可以从上例看到,虽然在主程序中没有给num1和num2赋值,但通过out修饰符以后num1和num2都有值了。
4、数组参数,以params声明
注意:数组参数使用params声明,如果形参中包含了数组参数,则它必须是参数列表中的最后一个参数。
例子:
class Program
{
static void Main(string[] args)
{
int[] a = {1,2,3};
Func(3,a);
Func(5,1,2,3,4); //相当于Func(5,new int[]{1,2,3,4})
Func(4,new int[]{ 11, 12, 13, 14 });
Console.ReadKey();
}
public static void Func(int num,params int[] a) //数组参数必须在最后
{
Console.Write("数组的长度:"+a.Length+"--------");
foreach (int i in a)
{
Console.Write("{0},",i);
}
Console.WriteLine("\n");
}
}
小结:以上就是常用的方法参数的传递类型
值类型:实际是赋值一份值给另外新开辟空间的形参,自己的值永远不变。
ref和out:实际上都是引用类型,即存放的是变量的地址,可以直接修改变量的值。
区别:ref在外部必须给实参赋值
out则不必在外部给参数赋值,在方法里面才赋值
params:数组参数用它声明,多个形参时必须将其放在形参列表的最后。
--------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------