一、值方式传递参数:
值方式传递参数传递时,参数可以是引用类型,也可以是值类型。
1. 使用引用类型做参数
例:使用员工类(SE)作为参数,实现员工投票功能(每投一票,员工人气值+1)
class Voter
{
public void Vote(SE se)
{
//人气值+1
se.Popularity++;
}
}
//测试相关代码
SE zhang=new SE();
zhang.Name=”张三”;
zhang.Popularity=10;
Voter v=new Voter();
v.Vote(zhang);
Console.Write(”姓名:{0},人气值:{1}“,zhang.Name,zhang.Popularity);
而输出的结果为:姓名:张三,人气值:11
因此,当类作为参数传递时,参数被修改,类成员的值也会被修改,其他引用类型的参数也是如此,如数组。
2. 使用值类型作为参数:
class Voter
{
public void Vote(StructSE se)
{
//人气值+1
se.Popularity++;
}
}
//测试相关代码
StructSE zhang=new StructSE ();
zhang.Name=”张三”;
zhang.Popularity=10;
Voter v=new Voter();
v.Vote(zhang);
//相当于传递进zhang的值副本,对于原值没有影响
Console.Write(”姓名:{0},人气值:{1}“,zhang.Name,zhang.Popularity);
而输出的结果为:姓名:张三,人气值:10
因此,以值类型做为参数进行值方式传递参数时,不能改变值类型参数的值。
二、引用方式传递参数:
在使用引用方式传递参数时,参数同样可以是引用类型,也可以是值类型。
而是用引用方式传递参数时,在定义方法和调用方法时都要使用ref关建字。
1. 使用引用类型作为参数,将投票方法要修改如下:
public void Vote(ref SE se)
{
//人气值+1
se.Popularity++;
}
//而调用时代码修改如下:
Voter v=new Voter();
v.Vote(ref zhang);
2. 使用值类型作为参数时投票方法和调用与使用引用类型作为参数的修改类似。
且经过验证,无论引用方式传递引用类型,还是值类型,都会保存方法中的修改。
三、小结:
使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留。
使用值方式(不用ref修饰)传递引用类型参数时,参数在方法中的修改会保留。
使用引用方式(用ref修饰)传递值类型或引用类型参数时,参数在方法中的修改都会保留。