---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
下面简单介绍一下函数的3中类型的参数: 1.通过值传递参数 值传递参数为每个值参数创建一个新的存储位置,相应表达式的值复制到其中,但只是创建了值的副本,只是该副本的值发生了变化,而原先的值并没有变化,并且当该方法执 行完毕后,该值的副本也会自动被释放掉,所以原先传进来的值本身更不可能发生变化,下面举个例子:
class Calculator
{
public static void AddOne(int var)//值传递,复制了一份,所以AddOne内部改变的是副本
{
var++;
}
public static void main()
{
int number = 6;
AddOne(number);
Console.WriteLine(number);//输出6,而不是7
Console.ReadKey();
}
}
2.通过引用传递参数(ref) 引用参数是对数据成员的内存地址的引用。与值参数不同,引用参数不创建新的存储地址。相反,引用参数表示内存的一个地址,该地址与方法调用中提供的变量的地址相同。 下面请看个例子比较一下:
class Program
{
public static void Swap1(int a, int b)
{
int c = a;
a = b;
b = c;
}
public static void Swap2(ref int a, ref int b)
{
int c = a;
a = b;
b = c;
}
public static void main()
{
int a = 9, b = 10;
Swap1(a,b);
Console.WriteLine("a={0},b={1}",a,b);//值传递,交换失败
Swap2(ref a, ref b);
Console.WriteLine("a={0},b={1}",a,b);//引用传递,交换成功
Console.ReadKey();
}
}
3.通过输出参数传递(out) 我们知道,要从方法中返回一个值,可以使用return语句,return语句可用于只返回单个值,而输出参数克服了这一限制。除了将参数从方法中传出而不是传入之外,输出参数 与引用参数相同,输出参数是对调用者提供的存储地址的引用。但是,为输出参数提供的变量在调用之前不需要赋值,赋值了也会被覆盖掉,方法将假设参数最初没有被初始化 。下面举个例子:
class Program
{
static void GetInfo(out int age,out string name)//内部必须赋值,内部为外部赋值,不需要初始化,out一般用于有多个返回值的场所
{
age = 30;
name = "xiaoming";
}
public static void main()
{
int age = 1;
string name = "haha";
GetInfo(out age, out name);
Console.WriteLine("age={0},name={1}",age,name);//输出age=30,name=xiaoming
string str = Console.ReadLine();
double i;
if (double.TryParse(str, out i))//有两个返回值,一个为布尔型,一个给i赋值
{
Console.WriteLine("转换成功,i的值为:{0}", i);
}
else
{
Console.WriteLine("转换失败");
}
Console.ReadKey();
}
}
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------