C#のrefとoutの違い
コンテンツ
「Ref」と「Out」は、C#で使用されるパラメーター修飾子です。 refとoutを使用すると、任意のメソッドへの参照によって任意の値型を渡すことができます。参照によって値の型を渡す理由は、refキーワードとoutキーワードの主な違いをもたらします。の ref keywordにより、呼び出されたメソッドは、refキーワードを使用して、渡された引数の内容を変更できます。の でる キーワードを使用すると、呼び出されたメソッドが1回の呼び出しで複数の値を返すことができます。 refとoutの違いを比較チャートとともに調べてみましょう。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | 参照 | でる |
---|---|---|
ベーシック | refキーワードで進められた引数の値の変更を許可します。 | メソッドは、outキーワードが前に付いた値を返すことができます。 |
初期化 | refパラメーターは、メソッド呼び出しの前に初期化する必要があります。 | outパラメーターは、終了する前に、呼び出されたメソッド内で初期化する必要があります。 |
宣言 | メソッドによって変更されるパラメーターは、メソッド宣言とメソッド呼び出し中にrefとして宣言されます。 | 返されるパラメーターは、メソッド宣言とメソッド呼び出し中にrefとして宣言する必要があります。 |
Refキーワードの定義
「ref」は、参照渡しでメソッドを呼び出す必要があるときに使用されるパラメーター修飾子です。呼び出されたメソッド内の引数に加えられた変更をその変数の元の値に反映する必要がある場合は、refパラメーター修飾子が使用されます。 refとして宣言する値型の前には、メソッドの宣言およびメソッドの呼び出し中に「ref」キーワードが付きます。メソッドを呼び出して宣言するときに、複数のパラメーターを「ref」として宣言できます。
システムを使用して;クラスDemoRef {public void Square(ref int s){s = s * s; }}クラスRef_main {static void Main(){DemoRef ob = new DemoRef(); int a = 10; Console.WriteLine( "aメソッド呼び出し前:" + a); ob.Square(ref a); // refキーワードを使用Console.WriteLine( "a after call:" + a); }} // beforeメソッド呼び出しを出力:10 afterメソッド呼び出し:100
上記のコードでは、変数 'a'が引数としてメソッドSquare(ref a)に引数として渡され、それにパラメータ修飾子refが付加されています。これは、Square(ref a)メソッドが変数「a」に対して実行する変更が、「a」の元の値に反映され、メソッドの外側にも反映されることを意味します。
パラメータ修飾子「ref」を扱う際に覚えておく必要がある重要な点がいくつかあります。
- refによってメソッドに渡す引数は、メソッドを呼び出す前に初期化する必要があります。
- メソッドは、初期値をref引数に割り当ててはなりません。
- refを参照変数とともに使用することもできます。
Outキーワードの定義
メソッドを呼び出すたびに、単一の値のみが返されます。メソッドが呼び出しで複数の値を返すようにする場合は、メソッドが終了したときに返すパラメータとともに「out」キーワードを使用する必要があります。メソッドに何も渡したくないが、メソッドに何かを返すようにしたい場合は、outキーワードを使用してパラメーターを使用します。例で理解しましょう。
システムを使用して;クラスDemoOut {public int Decompose(double x、out double fraction){int whole_num; whole_num =(int)x;分数= x-whole_num; whole_numを返します。 }} class Out_maint {static void Main(){DemoOut ob = new DemoOut(); int i;ダブルフラック; i = ob.Decompose(100.125、out frac); //キーワードConsole.WriteLine( "Whole number part is" + i);を使用しました; Console.WriteLine( "fraction part is" + frac); }} //出力整数部分は100小数部は0.125
上記のコードでは、メソッドDecompose()によって2つの値が返されています。 1つはキーワード「return」、つまりwhole_numによって返され、もう1つはoutキーワードが前にあるメソッドを呼び出している間、つまり「frac」というメソッドを返します。
outキーワードについて覚えておくべき重要なポイント。
- refキーワードとは異なり、outキーワードを使用するパラメーターは、メソッド呼び出しの前に初期化しないでください。
- 呼び出されたメソッド自体は、呼び出されたメソッド内で未割り当てと見なされるため、outキーワードを使用してパラメーターに値を割り当てます。つまり、初期値がないと想定されます。
- 呼び出されたメソッドは、メソッドが終了する前にoutパラメーターに値を割り当てる必要があります。
- outキーワードは、参照変数にも適用できます。
- refキーワードに続く変数がメソッドに渡されると、メソッド内で変数に加えられた変更は元の値に反映されます。メソッドに渡された変数の前にoutキーワードがある場合、メソッドはreturnキーワードを使用せずに変数を返します。
- refパラメーターは、メソッドに渡す前に初期化する必要があります。一方、outパラメーターは、渡されるメソッド内で初期化する必要があります。
- メソッドの呼び出し、宣言、または定義中に、refパラメーターは明示的にrefとして宣言されます。一方、メソッドの呼び出し、宣言、または定義中に、outパラメーターは明示的にoutとして宣言されます。
結論:
メソッドへの参照によって変数が渡される場合は常に、refおよびoutキーワードを使用できます。一方、両方のキーワードを使用する理由は異なります。refキーワードを使用してrefキーワードに先行する引数の値を変更し、呼び出されるメソッドに渡して、outキーワードを使用して先行する引数の値を戻すことができます。 outキーワードによる。