"out"は "ref"型と似ていますが、out変数を初期化する必要はありません。 "out"パラメータの他の用途はありますか?時にはコールバックメソッドで使用することがありますが、実際にどのように動作するのか、グローバルレベルのref変数ではなく、なぜそれらが必要なのかはわかりません。"out"パラメータが必要なのはなぜですか?
8
A
答えて
14
out
パラメータは、呼び出し元と呼び出し先(呼び出される関数)間のコントラクトを、呼び出し先が初期化することを明示的に指定することによって強制します。一方、ref
のパラメータを使用している場合は、呼び出し先がそれらを変更できることがわかりますが、呼び出し元はそれらを初期化する必要があります。
3
最も大きな例の1つは、TryParseメソッドです。何かが変換できるかどうかを確認したい場合、通常は変換可能な場合は変換された値が必要です。さもなければ、オブジェクトを呼び出し元のメソッドに戻すもう1つの方法です。
3
なぜメソッドが正常に終了した場合でも、呼び出されたメソッド自体が変数を上書きする保証はありませんが、呼び出し元のメソッドで何かを初期化する必要がありますか?それらはout
パラメータがあなたに与える利益です。
基本的に私はout
のパラメータを "おっと、私は複数の値を返す必要がある"と考えています。私はタプルを自分で使いたいと思っていますが、もちろん.NET 4にしかできませんでした。明示的な言語サポートがなければ、理想的であるよりもやや面倒です。
0
2主な違いは
- は、変数を初期化することを期待していませんREFとは異なりがあります。
- OUTを使用する場合、functionという名前は、calleeではない値を割り当てます。
関連する問題
- 1. なぜcount()関数にパラメータが必要なのですか?
- 2. 私の性格に生涯のパラメータが必要なのはなぜですか?
- 3. ObjectDataSourceに関数のオプションのパラメータが必要なのはなぜですか?
- 4. munmapにパラメータとして長さが必要なのはなぜですか?
- 5. このクエリはなぜパラメータを必要としますか?
- 6. Func outパラメータなし
- 7. static getパラメータを書く必要があるのはなぜですか?
- 8. コードファーストクラスにはナビゲーションプロパティが必要なのはなぜですか?
- 9. ここでエンディアンが必要なのはなぜですか?
- 10. Dockerでベースイメージが必要なのはなぜですか?
- 11. Railsでattr_accessorが必要なのはなぜですか?
- 12. JavaでString [] argsが必要なのはなぜですか?
- 13. lexでルールが必要なのはなぜですか?
- 14. ここでtypenameが必要なのはなぜですか?
- 15. ここでキャストが必要なのはなぜですか?
- 16. C++ 11でweak_ptrが必要なのはなぜですか?
- 17. Pythonで「finally」節が必要なのはなぜですか?
- 18. MFCでランタイムクラス情報が必要なのはなぜですか?
- 19. コントローラでInit関数が必要なのはなぜですか?
- 20. Ford-Fulkersonアルゴリズムでバックエッジが必要なのはなぜですか?
- 21. Typescriptなぜrequirejsが必要なのか
- 22. リポジトリパターン - なぜInterfacesが必要なのか?
- 23. なぜ必要なのですか$ = jQuery
- 24. なぜDataBind()メソッドが必要ですか?
- 25. なぜoffsetofマクロが必要ですか?
- 26. なぜReaderLockが必要ですか?
- 27. なぜnp.squeeze()が必要ですか?
- 28. なぜServer.HtmlEncodeが必要ですか?
- 29. なぜContinueWithメソッドが必要ですか?
- 30. なぜトークンスキームが必要ですか?