为什么两个出去& REF?

时间:2014-10-12 04:59:52

标签: c# .net out ref

out变量引用可以使用未分配变量的地址进行初始化,但ref变量无法做到这一点,使out优于ref。那么ref需要什么?

4 个答案:

答案 0 :(得分:4)

正如你所说,你知道差异,因此我假设你也知道必须分配out参数。

因此,我相信你想知道为什么需要分配一个out论据。

out关键字 - 这意味着您正在使用此参数来输出内容。

考虑,int add(int x,inty)。如果此方法不会返回任何内容,那么它是否有效。这里我们也声明了一个这个方法返回整数的契约。类似地,在out关键字的情况下,我们定义一个合同,将分配out变量并将作为输出提供。

为什么我们需要更新? 这是因为我们明确地将其标记为out参数,因此我们确信我们将分配一个值并将其返回。如果有一些情况我们没有任何东西要分配,我们仍在使用论证,那么我很确定我们有设计问题。

ref关键字: - 表示您正在传递参考。它绝不意味着您将分配它并提供一些输出。你可以这样使用它,但它不是合同。你有一个参数的参考,你可以用它做任何事情。在C#中,默认情况下会按值传递参数。 ref Keyword为您提供了一种通过引用传递参数的方法。

您可以获得有关ref关键字here的更多信息。

希望这会有所帮助。

答案 1 :(得分:1)

问题是因为out参数必须在函数结束之前初始化或分配。这基本上是你不要忘记设置变量。

static void Method(out int pointer)
{
    pointer = 5; //Initialize or assign to fix the error
}

答案 2 :(得分:1)

我的理解是out参数是由被调用的方法设置的,而不是传递给方法。

所以这些都是有效的:

class Program
{
    static void Main(string[] args)
    {
        int integer;
        Method(out integer);

        // integer is now 9
    }

    static void Method(out int pointer)
    {
        ...
        pointer = 9;
    }
}

// Option 2:

class Program
{
    static void Main(string[] args)
    {
        int integer = 9;
        Method(integer);            
    }

    static void Method(int pointer)
    {            
        //Do something with pointer = 9
    }
}

答案 3 :(得分:1)

如果您想通过引用参数传递给函数,则应使用ref

class Program
{
    static void Main(string[] args)
    {
        int integer = 9;
        Method(ref integer);
    }

    static void Method(ref int pointer)
    {
    }
}

这将正常编译。