一、代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ShowParams
{
class Program
{
//看看C#中方法的参数的区别
//1、值参数 会把内存中的某变量的值copy一份,然后再开辟新的内存空间进行保存
class ValueParams
{
public void Add(int i)
{
i++;
}
public void Test()
{
int i = 0;
Add(i);
Console.WriteLine(i);
}
}
//2、引用参数 引用类型参数不会开辟新的内存空间,原地址不变,使用地址内的值,进行运算时,值会改变
class QuoteParams
{
//使用引用类型关键字 ref
public void Add(ref int i)
{
i++;
}
public void Test()
{
int i = 0;
Add(ref i);
Console.WriteLine(i);
}
}
//3、输出参数,关键字:out 可用于“返回多个值”
class OutParams
{
//使用输出参数关键字out
public void Add(out int i,out int j)
{
//使用输出参数必须对参数进行初始化
i = 0;
j = 0;
i++;
j++;
}
public void Test()
{
//输出参数在传入方法前可以不进行初始化,其它参数必须进行初始化
int i;
int j;
Add(out i,out j);
Console.WriteLine(i);
Console.WriteLine(j);
}
}
//数组参数 关键字:params 可在声明方法时参数个数不确定,且参数类型相同时使用 ,但在声明的方法里必须位于函数列表的最后
class ArraryParams
{
public void Add(params int[] arrI)
{
for (int i=0; i < arrI.Length; i++)
{
arrI[i]++;
}
}
public void Test()
{
int[] arrI={1,2,3,4,5};
Add(arrI);
for (int i = 0; i < arrI.Length; i++)
{
Console.WriteLine(arrI[i]);
}
}
}
static void Main(string[] args)
{
//值参数
ValueParams vP = new ValueParams();
vP.Test();//结果输出为0
//引用参数
QuoteParams qP = new QuoteParams();
qP.Test();//输出结果为1,i值发生了改变
//输出参数
OutParams oP = new OutParams();
oP.Test();//输出结果为1,1 i,j的值都发生了改变,可以起到函数返回多个值的作用
//数组参数
ArraryParams aP = new ArraryParams();
aP.Test();
Console.ReadKey();
}
}
}