首先:两者都是按地址传递的,使用后都将改变原来参数的数值。
其次:ref可以把参数的数值传递进函数,ref参数要求在方法外必须赋值,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以方法内必须为out参数赋值。这个就是两个的区别,或者说ref是有进有出,out是只出不进.
out例句:
static void Main(string[] args)
{
//请用户输入用户名和密码 写一个方法判断用户是否登录成功 并且返回登录信息
Console.WriteLine("请输入用户名");
string strName = Console.ReadLine();
Console.WriteLine("请输入密码");
string strPwd = Console.ReadLine();
string str;
bool b = IsLogin(strName, strPwd, out str);
Console.WriteLine("登录结果{0}",b);
Console.WriteLine("登录信息{0}",str);
Console.ReadKey();
//out参数 的作用就是返回多个值 在方法内必须为out参数赋值
}
public static bool IsLogin(string name, string pwd,out string msg)//在多余返回值的前面标记out
{
bool b = false;
if(name=="admin"&&pwd=="888888")
{
b = true;
msg = "登录成功!";
}
else if (name == "admin")
{
msg = "密码错误!";
}
else if (pwd == "888888")
{
msg = "用户名错误!";
}
else
{
msg = "系统异常请联系管理员。。";
}
return b;
}
ref例句:
static void Main(string[] args)
{
int n1 = 10;
int n2 = 20;
Console.WriteLine("交换前的数为:");
Console.WriteLine("n1={0},n2={1}", n1, n2);
Change(ref n1, ref n2);//ref 参数 侧重于将值带入一个方法中,再将值从这个方法中带出 ref参数要求在方法外必须赋值
Console.WriteLine("交换后的数为:");
Console.WriteLine("n1={0},n2={1}", n1, n2);
Console.ReadKey();
}
public static void Change(ref int number1, ref int number2)
{
int temp = number1;
number1 = number2;
number2 = temp;
}
1 它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
注:在C#中,方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params。
|