inとrefとoutの使い分け方 質問する

inとrefとoutの使い分け方 質問する

先日、outの代わりにパラメータキーワードを使うべきかどうか尋ねられました。とキーワードrefの違いは理解しているつもりですが(refout前に尋ねたref) であり、 ==および というのが最も適切な説明のようですinが、ではなく をout常に使用する必要がある (仮想またはコードによる) 例にはどのようなものがありますか。outref

refより一般的なので、 を使用するのはなぜでしょうかout? これは単なる構文上の糖衣なのでしょうか?

ベストアンサー1

out必要がない限り使用してくださいref

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

さらに、宣言または呼び出しの読者に、初期値が関連しているかどうか (および潜在的に保持されるかどうか)、または破棄されるかどうかも示します。

小さな違いとして、出力パラメータを初期化する必要はありません。

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);

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

おすすめ記事