當使用out參數定義方法時,爲什麼在調用方法時必須指定out關鍵字。它在方法定義中已經存在,並且運行時應該知道傳遞的任何參數都將是out參數。爲什麼我們需要在調用方法時使用關鍵字
如果編譯器會接受帶或不帶關鍵字的參數,並且語義不同,但是如果您必須添加關鍵字以使代碼編譯,那麼它有什麼用?編譯器不應該自動處理它?
與參考相同
當使用out參數定義方法時,爲什麼在調用方法時必須指定out關鍵字。它在方法定義中已經存在,並且運行時應該知道傳遞的任何參數都將是out參數。爲什麼我們需要在調用方法時使用關鍵字
如果編譯器會接受帶或不帶關鍵字的參數,並且語義不同,但是如果您必須添加關鍵字以使代碼編譯,那麼它有什麼用?編譯器不應該自動處理它?
與參考相同
可能是因爲C#允許你編寫重載這樣的:
class X
{
public void Y(int i) { ... }
public void Y(out int i) { ... }
}
在這種情況下編譯無法理解與keywork out
該方法應被調用,如果你當你打電話不寫此關鍵字方法。當通過此keyworrd聲明方法時,通常應該編寫out
。
當然,當您在調用方法時編寫out
時,您明確知道可以在方法中更改此變量。它非常可讀。
這個要求不是編譯器的緣故。 f (x, out y)
立即通知誰正在閱讀代碼y
將在f
返回後被覆蓋,而不需要查找f
的定義,從而爲他們節省心智的CPU週期。
這是一個很好的觀點,也許它與可讀性有關。假設我們有兩個參數的方法,像這樣
bool TryGetString(string input, out string output)
,而無需指定輸出參數,只是簡單的看看別人調用該方法時,它不會做,因爲完整。
當您調用out
關鍵字的方法時,您的調用代碼肯定知道它是通過引用傳遞的。在某些情況下,當您調用該方法時,您可能會在第三方庫中遇到關鍵字定義爲out
的方法,但您不知道該參數是否通過引用或值傳遞。所以你不得不在調用方法中使用out
進行readability。
我想,這是爲了使代碼更易讀。 – mohang 2010-06-18 06:46:23