摘要
out关键字会导致参数通过引用来传递。这与 ref关键字类似,不同之处在于 ref要求变量必须在传递之前进行初始化。若要使用 out参数,方法定义和调用方法都必须显式使用 out关键字。
在C#编程中,函数调用通常是通过传递参数来实现的。这些参数可以是值类型(值被复制到函数内部)或引用类型(变量指向外部对象)。引用类型的参数通常使用引用参数来传递,其中函数接受的是对变量的引用,而不是对其值的副本。
在某些情况下,使用引用参数可能会导致问题,特别是当变量需要被修改时。例如,如果在函数内部修改了传递给它的引用参数,但该参数不再在函数外部可见,那么修改可能不会影响到函数外部的代码。这是因为在函数内部修改的变量引用的是内部对象,而不是外部对象。
为了解决这个问题,C#提供了out关键字,允许函数返回一个值,并且该值必须在调用函数时显式地传递。在函数内部,out参数表示变量的值,该变量必须在函数调用之前被初始化。因此,当函数完成工作时,out参数将包含函数的输出值。
正文
一个例子,需要同时返回一个数组中的最大值,最小值,总和
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7 };
int max = 0;
int min = 0;
int sum = 0;
Values(numbers, out max, out min, out sum);
Console.WriteLine($"最大:{max},最小:{min},合计:{sum}");
}
private static void Values(int[] numbers,out int max,out int min,out int sum)
{
max = 0;
min = numbers[4];
sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] > max)
{
max = numbers[i];
}
if (numbers[i] < min)
{
min = numbers[i];
}
sum += numbers[i];
}
}
image.png
一个登录的例子
static void Main(string[] args)
{
string Name = Console.ReadLine();
string Password = Console.ReadLine();
string msg = "";
bool ret = Login(Name, Password, out msg);
Console.WriteLine($"登录:{ret},信息:{msg}");
}
private static bool Login(string name, string password, out string msg)
{
if (name == "admin" && password == "123456")
{
msg = "登录成功!";
return true;
}
else
{
msg = "登录信息不正确!";
return false;
}
}
image.png
网友评论