2014-10-12 34 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) 
    { 
    } 
} 

這通常編譯。

相關問題