2010-06-18 81 views
8

當使用out參數定義方法時,爲什麼在調用方法時必須指定out關鍵字。它在方法定義中已經存在,並且運行時應該知道傳遞的任何參數都將是out參數。爲什麼我們需要在調用方法時使用關鍵字

如果編譯器會接受帶或不帶關鍵字的參數,並且語義不同,但是如果您必須添加關鍵字以使代碼編譯,那麼它有什麼用?編譯器不應該自動處理它?

與參考相同

+6

我想,這是爲了使代碼更易讀。 – mohang 2010-06-18 06:46:23

回答

3

可能是因爲C#允許你編寫重載這樣的:

class X 
{ 
    public void Y(int i) { ... } 
    public void Y(out int i) { ... } 
} 

在這種情況下編譯無法理解與keywork out該方法應被調用,如果你當你打電話不寫此關鍵字方法。當通過此keyworrd聲明方法時,通常應該編寫out

當然,當您在調用方法時編寫out時,您明確知道可以在方法中更改此變量。它非常可讀。

MSDN Article

11

這對於可讀性來說確實很棒。 此外,它會幫助你避免意外的行爲。使用out參數調用方法時,您肯定會知道傳遞變量的值可以更改。

+0

如果你傳遞一個參數'out',它將會被改變,不僅'可以改變'。在方法返回之前,必須設置Out參數。 – lxalln 2010-06-18 09:37:01

+1

在方法主體模塊中設置是否可以設置值,但我的意思是您可以設置相同的值,以免發生變化。 – Incognito 2010-06-18 10:01:58

7

這個要求不是編譯器的緣故。 f (x, out y)立即通知誰正在閱讀代碼y將在f返回後被覆蓋,而不需要查找f的定義,從而爲他們節省心智的CPU週期。

0

這是一個很好的觀點,也許它與可讀性有關。假設我們有兩個參數的方法,像這樣

bool TryGetString(string input, out string output) 

,而無需指定輸出參數,只是簡單的看看別人調用該方法時,它不會做,因爲完整。

0

當您調用out關鍵字的方法時,您的調用代碼肯定知道它是通過引用傳遞的。在某些情況下,當您調用該方法時,您可能會在第三方庫中遇到關鍵字定義爲out的方法,但您不知道該參數是否通過引用或值傳遞。所以你不得不在調用方法中使用out進行readability。

相關問題