簡體   English   中英

在C#中,我可以發送一個out參數在別處使用

[英]In C#, can I send an out parameter to be used elsewhere

我有一個函數,由代碼的另一部分調用,簽名:

public override bool DoSomething(Foo f, out string failed)
{
    failed = "I failed";
    _anotherClassMethodExpectingString.SetString(failed);
}

所以我的問題是 - 如果我需要將其他類方法發送給我的調用者在其“out”參數中預期的相同字符串,我可以只發送相同的變量,而不會對我的調用者產生任何影響嗎? “out”參數對我來說有點混亂..我應該使用這樣的東西代替:

public override bool DoSomething(Foo f, out string failed)
{
   string localStr = "I failed";
   failed = localStr;
   _anotherClassMethodExpectingString.SetString(localStr);
}

除非您調用的后續方法也使用out參數,否則無需定義局部變量。 該字符串不受任何常規參數傳遞的影響。

如果您不希望或不希望您的方法調用者看到第三種方法的任何更改,那么您擁有的就沒有問題。 如果我正確地閱讀你的問題,這似乎是你的意圖。

如果您希望調用者反映第三種方法引入的更改,那么它也需要是一個out參數,或者通過返回值返回修改,然后在返回之前將其分配給原始輸出參數。

如果為沒有refout的方法聲明了參數,則該參數可以具有與之關聯的值。 該值可以在方法中更改,但是當控制傳遞回調用過程時,不會保留更改的值。

鑒於字符串在.NET中是不可變的,所以在沒有refout字符串參數的情況下將failed傳遞給任何方法都是安全的,並確保它不會被更改。

out參數類似於c ++中對象的指針。 因此,如果您不使用'out'定義器,則不會更改參數的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM