//==============================
// 于是乎!把(ref 和 out )两位大侠,请到了寒舍,恭以待之,以敬程序员对两位大侠之礼
Look at this code:
void Square(ref int n )
{
n=n*n;
}
很简单的一个平方的一个方法,
int a ;
Square(ref a );
请了 ref 先生看了一下 哇! ref 先生大怒 ,说 请我来居然不知道我的习惯,你不知道在用我之前 必须先给我一个值吗? 小生惭愧不已!连忙修正
int money = 4;
Square(ref money);
然后,再请 ref 先生审视,ref 先生也露出了两颗洁白的门牙,冲我笑了笑,昌兄弟啊!看你对我还有点印象,现在你看money是多少? , 哇塞!成 16 了; 此时,坐在旁边的 out 先生看不下去了,他说我也能打到如此的效果,为了和ref 先生比试一下谁的武艺高强?他们决定一决高下?
Look at this code :
//省略自动生成的方法
static void Main(string[] args)
{
string message;
CheckLogin("tom","123",out message);
Console.Write(message); //(郎有话要说:此时的你是否有疑问呢?message 能否输出来呢!)
}
//根据用户名密码登陆
public UserInfo CheckLogin(string name,string pwd,out string msg)
{
UserInfo ui = UserManager.GetUserByUserName(name);
if(ui == null)
{
msg = "没有该用户.";
return null;
}
if(ui.Pwd != pwd)
{
msg = "密码错误";
return null;
}
msg = "登陆成功";
return ui;
}
//******************************************
out 先生 也小露了一下自己的才艺
郎有话要说:
ref 相当于传递进来的是对应参数的引用(相当于参数地址),所以在调用方法以前,必须把指定的参数 "初始化"(希望大家别想我一样对ref 先生那么不敬),否则就会传入 "空指针";
out 的作用,就是让方法能够通过 out 的参数传出数据,相当于让一个方法可以返回多个值(return 最多返回一个值)。因为 out 是为了传出数据,所以传入以前是否初始化无关紧要,但在完成方法以前,一定要对 out 的参数赋值,毕竟是传出参数。