先日、out
の代わりにパラメータキーワードを使うべきかどうか尋ねられました。とキーワードref
の違いは理解しているつもりですが(ref
out
前に尋ねたref
) であり、 ==および というのが最も適切な説明のようですin
が、ではなく をout
常に使用する必要がある (仮想またはコードによる) 例にはどのようなものがありますか。out
ref
は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);
ここで、初期値はメソッドに関連します。