1. ホーム
  2. c#

[解決済み] in vs ref vs out の使い分け

2022-03-23 09:41:59

質問

先日、ある方から「パラメータキーワードはいつ使えばいいのか」という質問を受けました。 out ではなく ref . の違いは理解している(と思う)のですが。 refout キーワード(これまで 前に質問した ) と説明するのがベストのようです。 ref == inout を常に使用すべき(仮定またはコード)例は何ですか? out であって ref .

以来 ref はより一般的なものです。 out ? 単なる構文解析なのか?

どのように解決するのですか?

を使用する必要があります。 out が必要な場合を除き ref .

データを別のプロセスなどにマーシャルする必要がある場合、大きな違いとなり、コストがかかる可能性があります。そのため、メソッドが初期値を使用しない場合は、初期値をマーシャルしないようにしたいものです。

さらに、宣言や呼び出しの読み手に対して、初期値が重要なのか(保存される可能性があるのか)、捨てられるのかを示すことができます。

細かい違いとして、outパラメータは初期化する必要がありません。

の例 out :

string a, b;
person.GetBothNames(out a, out b);

GetBothNamesが2つの値をアトミックに取得するメソッドである場合、aやbが何であれ、このメソッドは動作を変更しない。もし、ハワイのサーバーに呼び出された場合、ここからハワイに初期値をコピーするのは帯域の無駄遣いです。ref.を使った同様のスニペット

string a = String.Empty, b = String.Empty;
person.GetBothNames(ref a, ref b);

は、a と b の初期値が関係しているように見えるので、読者を混乱させる可能性があります (メソッド名からはそうではないことがわかりますが)。

の例 ref :

string name = textbox.Text;
bool didModify = validator.SuggestValidName(ref name);

ここでは、初期値がメソッドに関連しています。