2010-11-29 10 views
8

"out"は "ref"型と似ていますが、out変数を初期化する必要はありません。 "out"パラメータの他の用途はありますか?時にはコールバックメソッドで使用することがありますが、実際にどのように動作するのか、グローバルレベルのref変数ではなく、なぜそれらが必要なのかはわかりません。"out"パラメータが必要なのはなぜですか?

答えて

14

outパラメータは、呼び出し元と呼び出し先(呼び出される関数)間のコントラクトを、呼び出し先が初期化することを明示的に指定することによって強制します。一方、refのパラメータを使用している場合は、呼び出し先がそれらを変更できることがわかりますが、呼び出し元はそれらを初期化する必要があります。

3

最も大きな例の1つは、TryParseメソッドです。何かが変換できるかどうかを確認したい場合、通常は変換可能な場合は変換された値が必要です。さもなければ、オブジェクトを呼び出し元のメソッドに戻すもう1つの方法です。

3

なぜメソッドが正常に終了した場合でも、呼び出されたメソッド自体が変数を上書きする保証はありませんが、呼び出し元のメソッドで何かを初期化する必要がありますか?それらはoutパラメータがあなたに与える利益です。

基本的に私はoutのパラメータを "おっと、私は複数の値を返す必要がある"と考えています。私はタプルを自分で使いたいと思っていますが、もちろん.NET 4にしかできませんでした。明示的な言語サポートがなければ、理想的であるよりもやや面倒です。

0

2主な違いは

  1. は、変数を初期化することを期待していませんREFとは異なりがあります。
  2. OUTを使用する場合、functionという名前は、calleeではない値を割り当てます。
関連する問題