学习 C# 引用和输出如何允许它在这个特定实例中工作?


class Program
{
static void Main(string[] args)
{
double weight;
string num;
num = getWeight(out weight);
Console.WriteLine(num + " lb = " + lbToKg(weight) + "kg");
kgToLb(ref weight);
Console.WriteLine(num + " kg = " + weight + "lb");
}
static string getWeight (out double theWeight)
{
theWeight = 10;
return "Ten";
}
static double lbToKg(double pounds = 2)
{
return (pounds * 0.45359237);
}
static void kgToLb (ref double weight)
{
weight = (weight / 0.45359237);
}
}

所以我想我的问题是,"重量"在什么时候变成"重量",是什么允许这种情况发生? 是 getWeight(( 方法中列出的输出(输出(吗? 如果是这样,如何? 引用参数如何影响这一点?

我觉得我离得到这个非常接近,我只是想完全清楚它是如何以及为什么工作的。

在这种情况下,refout几乎相同。不同之处在于,使用ref对象必须在进入函数之前初始化,而使用out对象将在函数内初始化。由于您的对象是double的,因此不需要初始化,并且这两个关键字的工作方式几乎相同。唯一的区别是,对于out您必须分配一个值,而对于ref,它是可选的。

static void Main(string[] args)
{
double weight;
string num;
num = getWeight(out weight);
// here weight goes to the function and comes back with value of 10.
Console.WriteLine(num + " lb = " + lbToKg(weight) + "kg");
kgToLb(ref weight);
// here again weight goes to the function and comes back with a new value
Console.WriteLine(num + " kg = " + weight + "lb");
}

所以实际上theWeight是一个局部变量,它将weight的引用保存在函数getWeight内。功能kgToLb内的重量也是如此。 希望这是清楚的。

您可以在此处阅读更多内容 https://www.dotnettricks.com/learn/csharp/difference-between-ref-and-out-parameters

看起来他们正在做同样的事情,但正在发生的事情存在相当大的差异。这两者都通过引用传递参数,但它们的用例不同,规则也不同。

">

重量"变为"重量">

由于它们在这两种情况下都是通过引用传递的,因此theWeightweight都引用相同的值。

使用ref命令时,必须在调用之前初始化传入的变量。使用out时不需要这种情况。

但另一方面,当在方法中使用out时,必须在方法完成之前分配标有它的参数。

还有一些差异,但要带走的要点是两者都通过引用传递变量。

最新更新