C#にはout
and ref
キーワードがあります。なぜこれら2つが必要なのですか?免責事項:C#の深い知識はありません。
ref
とout
?または、値渡し引数と比較して、参照引数ref
/ の使用法を尋ねていout
ますか(パラメーターの修飾子はありません)?または両方?
C#にはout
and ref
キーワードがあります。なぜこれら2つが必要なのですか?免責事項:C#の深い知識はありません。
ref
とout
?または、値渡し引数と比較して、参照引数ref
/ の使用法を尋ねていout
ますか(パラメーターの修飾子はありません)?または両方?
回答:
実装面では、それらは本質的に同じものですが、そうout
でref
はないことを伝えます。入力は気にしません。 これは、あなたとツールにとって特定のことを意味します。たとえば、初期化されていない変数をout
パラメーターに渡すことができますが、そうでない場合は問題ありません。関数内では、out
パラメーターが値を返す前に割り当てる必要がありますが、何もする必要はありませんすべてref
値付き。
out
があり、最初に変数を処理する方法により適した方法を提供します。
out
パラメータに渡すことは安全です。
これら2つのキーワードを理解するには、参照渡しで値を渡すことの意味を理解する必要があります。基本的に、メソッドまたは関数内で渡すパラメーター変数を変更した場合、関数が終了してもその変数は変更された値を保持することを意味します。これをパラメータとして宣言するref
かout
、これを実現しますが、通常のパラメータ変数は、関数で変更した場合でも元の値を保持します。
唯一の間の違いref
とout
つまりout
、あなたが関数に渡す前に、変数を初期化する必要はありませんが、ref
ありません。一方、関数内の変数に何かを割り当てる必要out
がありますが、ref
そうではありません。
あなたが尋ねました。
C#にはoutとrefがあり、これら2つが必要な理由です。C#の詳細な知識はありません。なぜoutおよびrefパラメーターが必要ですか?
そして、答えは、それらは必須ではなく、たとえばjavaにもrefがなく、VBにはrefしかありません(そしてメソッド宣言でのみ必要です)。
どちらも使わずにプログラム全体を簡単に書くことができます。
それらは時々役立つので存在します。1つだけでなく2つあるのは、このためです。「ここに何かあり、必要に応じて変更する」と「この値に新しい値を与える」を区別すると便利です。
他の言語は優先順位が異なるため、これらまたは同等の言語を含む場合と含まない場合があります。彼らは、どちらかが有用であるかどうかについても意見が異なる場合があり、そのため、どちらか一方を実装しないことを積極的に決定するかもしれません。
それらのコアの両方ref
とout
に割り当てること-それは更新できるようにする方法に変数のアドレスを渡すためのメカニズムを提供するref
か、out
パラメータは、呼び出し元のコンテキストに変数を更新します。それらが異なるところはout
保証にあります:変数が更新されることを保証しますが、更新ref
しません。
通話の反対側からも同様の違いがあります。out
メソッドへのパラメーターは、到着時に有用なものを含むことが保証されておらず、ある時点で値に設定する必要がありref
ますが、パラメーターは値を持っていると想定することができ、特定のことをする必要はありません。
この違いはコード分析、生成、および最適化に影響を与えますが、ほとんどの場合、これはひどく明らかではありませんが、プログラムの動作に影響を与える可能性があります。コードジェネレーターは、呼び出しの直前まで変数の割り当てを延期できます。オプティマイザーは、契約などに基づいていくつかの操作をより効果的に並べ替えることができると判断する場合があります。
使用に関しては、一般的な規則としてout
、変数としてパラメーターとして到着するときとそうするときに、変数の内容を気にしない状況で使用しref
ます。