[英]What is the purpose of the “out” keyword at the caller (in C#)?
當C#函數具有輸出參數時,請按以下說明進行清除:
private void f(out OutputParameterClass outputParameter);
這表明在調用函數時不必初始化參數。 但是,調用此函數時, 必須重復out關鍵字 :
f(out outputParameter);
我想知道這有什么好處。 為什么必須重復部分功能說明? 有人知道嗎?
這意味着您知道自己在做什么-承認這是一個out
參數。 您是否真的希望完全不同的行為悄無聲息地發生? ref
, ref
也是如此。
(您也可以根據值與輸出/參考值進行重載,但我不建議這樣做。)
基本上,如果您有一個(未適應的)局部變量,並將其用作非輸出/引用參數,則知道該變量的值不會在方法中更改。 (如果它是引用類型變量,則它所引用的對象內的數據可能會更改,但這是非常不同的。)
這避免了在C ++中出現的那種情況,即您在不知不覺中通過引用傳遞某些東西的情況,但是假設該值沒有改變...
這是一個設計功能。 顯然,這不是必需的,但有助於提高可讀性。
雖然我不知道這種決定的起源,但我知道它有重載的目的。
在同一個類中創建這兩個函數是完全合法的:
private void f(out OutputParameterClass outputParameter);
和
private void f(OutputParameterClass outputParameter);
在調用此類重載時指定out
關鍵字是有意義的。
為了提高可讀性,了解該方法可以/將對您的變量做什么。
從MSDN獲得了更多信息: http : //msdn.microsoft.com/en-us/vcsharp/aa336814.aspx
調用out參數的方法的調用者不需要在調用之前分配給作為out參數傳遞的變量。 但是,被調用方必須在返回之前分配給out參數。
我能看到的唯一原因是要確保函數的用戶知道該參數的值可以由函數修改。 我認為這是一件好事。
我認為這是一致性和清晰度的問題。
顯然,沒有它,編譯器可以做得很好。 但是,添加了out關鍵字后,您可以使意圖更清晰,代碼也更加清晰易讀。
最佳答案我被張貼有注釋底座 :
重復out / ref的最重要原因是,如果您調用的函數使用不同的簽名進行重構,則會出現編譯錯誤。 最值得注意的是,如果參數從非輸出變為非輸出,您將立即知道。
為了清楚起見,您可能必須out
。 如果您不查看方法簽名就不會知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.