2014-10-12 73 views
-3

out变量引用可以用未赋值变量的地址初始化,但ref变量不能这样做,使得out优于ref。那么需要什么ref为什么都出&ref?

+1

正确的答案是“因为它是”。这就是'out'的定义。 – Mephy 2014-10-12 05:05:33

+0

@Mephy还有5人聚集在一起提供答案。 – mihai 2014-10-12 05:17:50

+0

@Mephy no offens,你可以请转发的链接,定义这种行为的参数。为更好地理解 – 2014-10-12 05:22:41

回答

1

问题是因为out函数必须在函数结束前被初始化或赋值。基本上这样你就不会忘记设置变量。

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

检查此链接:

C# Out Vs Ref

理念仍然你在做什么是引用类型正确通过传递前初始化,但出来的调用方法需要返回

之前赋值

尝试删除主方法中的赋值,然后使用Ref,您将得到差异,这将再次导致编译错误

+0

看起来像一个断开的链接。 – 2018-01-12 20:42:42

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 
    } 
} 
4

正如你说,你是知道有关的差异,因此我假设你也是知道的事实说出来的参数必须分配。

因此,我相信你想知道为什么需要分配out参数。

out关键字 - 这意味着你正在使用这个参数来输出一些东西。

考虑,int add(int x,inty)。如果此方法不会返回任何应用程序。这里我们也声明了一个合约,该方法返回整数。同样如果out关键字的情况下,我们正在定义一个out变量将被分配并将作为输出提供的合同。

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

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

您可以了解更多关于ref关键字here的信息。

希望这会有所帮助。

1

如果你只想参数通过引用的函数,你应该使用ref

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

    static void Method(ref int pointer) 
    { 
    } 
} 

这通常编译。