函数参数中的ref和out
**作用:**能够让值类型和引用类型的函数参数在函数内部更改时,外部参数也一起更改。
**使用:**在声明函数参数前加上ref或者out
static void Hai(ref string args ){}
static void Hai(out string args ){}
ref和out的区别 :
- ref传入函数的变量必须初始化,但在内部可改可不改。
- out传入函数的变量不需要初始化,但在内部必须赋值。
练习题:
namespace L8_ref和out
{
internal class Program
{
//练习题
//让用户输入用户名和密码,返回给用户一个bool类型的登陆结果,并且还要单独的给返回给用户的一个登陆信息
//如果用户名错误,除了返回登陆结果之外,登陆信息为”用户名错误“
//如果密码错误,除了返回登陆结果之外,登陆信息为”密码错误
static bool UserLoginout( string username, string password,out string loginMessage)
{
bool result;
loginMessage = "";
if (username == "哈哈哈")
{
result = true;
if (password == "123456")
{
result = true;
loginMessage = "登陆成功";
}
else
{
result = false;
loginMessage = "密码错误";
}
}
else
{
result = false;
loginMessage = "用户名错误";
}
return result;
}
static void Change(int value) { value = 30; }
static void Changeref(ref int value) { value = 30; }
static void Changeout(out int value) { value = 30; }
static void Main(string[] args)
{
int num = 0;
Change(num);
Console.WriteLine(num);
Changeref(ref num);
Console.WriteLine(num);
int num1;
Changeout(out num1);
Console.WriteLine(num1);
//练习题
string loginMessage;
string username;
string password;
try
{
Console.WriteLine("请输入用户名");
username = Console.ReadLine();
Console.WriteLine("请输入密码");
password = Console.ReadLine();
}
catch (Exception)
{
throw;
}
bool userLoginResult = UserLoginout(username, password, out loginMessage);
Console.WriteLine("登陆结果为:{0},登陆信息为:{1}" , userLoginResult, loginMessage);
}
}
}