推奨されます, 2024

エディターズチョイス

C#でのrefとoutの違い

“ Ref”と“ Out”はC#で使用されるパラメータ修飾子です。 refとoutを使用すると、任意のメソッドへの参照によって任意の値型を渡すことができます。 参照によって任意の値型を渡す理由は、refキーワードとoutキーワードの主な違いを紹介します。 refキーワードを使用すると、呼び出されたメソッドはrefキーワードで渡された引数の内容を変更できます。 outキーワードを使用すると、呼び出されたメソッドは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); ob.Square(ref a); //キーワードコンソールを使用します。WriteLine( "a after call:" + a); //メソッド呼び出しの前に出力:10メソッド呼び出しの後に:100 

上記のコードでは、変数 'a'が引数としてメソッドSquare(ref a)の引数として渡され、それに付随するパラメータ修飾子refが渡されています。 これは、Square(ref a)メソッドが内部の変数 'a'に対して実行する変更が、メソッドの外部の 'a'の元の値にも反映されることを意味します。

パラメータ修飾子“ ref”を扱うときに覚えておくべきいくつかの重要な点があります。

  • 参照によってメソッドに渡す引数は、メソッド呼び出しの前に初期化する必要があります。
  • メソッドは、初期値をref引数に割り当ててはいけません。
  • 参照変数と一緒にrefを使うこともできます。

outキーワードの定義

メソッドを呼び出すたびに、単一の値のみが返されます。 メソッドが1回の呼び出しで複数の値を返すようにする場合は、メソッドが終了したときに返すパラメータと一緒に“ out”キーワードを使用する必要があります。 メソッドに何も渡さないで、メソッドに何かを返させたい場合は、outキーワードを付けてパラメータを使用することがあります。 例でそれを理解しましょう。

 システムを使用します。 class DemoOut {public int(double x、out double fraction){int whole_num;} whole_num =(int)x; fraction = x - whole_num; whole_numを返します。 Out_maintクラス{static void Main(){DemoOut ob = new DemoOut();}} int i; ダブルフラック。 i = ob.Decompose(100.125、out frac); //キーワードConsole.WriteLine( "整数部は" + i);を使用しました。 Console.WriteLine( "小数部は" + frac); 整数部は100小数部は0.125 

上記のコードでは、Decompose()メソッドによって2つの値が返されています。 1つはキーワード「return」、つまりwhole_numによって返され、もう1つはメソッド呼び出し中にoutキーワードが先行するパラメータ、すなわち「frac」を返します。

outキーワードについて覚えておくべき重要なポイント。

  • refキーワードとは異なり、outキーワードを使用するパラメータは、メソッド呼び出しの前に初期化してはいけません。
  • 呼び出されたメソッドは、呼び出されたメソッド内では割り当てられていないと見なされるため、outキーワードを使用してパラメータに値を割り当てます。つまり、初期値がないと見なされます。
  • 呼び出されたメソッドは、メソッドが終了する前にoutパラメータに値を割り当てる必要があります。
  • outキーワードは参照変数にも適用できます。

C#のRefとOutの主な違い

  1. refキーワードの後に​​続く変数が任意のメソッドに渡されると、そのメソッド内でその変数に加えられた変更は元の値に反映されます。 メソッドに渡された変数の前にoutキーワードがある場合、そのメソッドはreturnキーワードを使用せずにそれを返します。
  2. refパラメータは、メソッドに渡される前に初期化する必要があります。 一方、outパラメータは、渡されるメソッド内で初期化する必要があります。
  3. メソッドの呼び出し、宣言、または定義中に、refパラメータは明示的にrefとして宣言されます。 一方、メソッドの呼び出し、宣言、または定義中は、outパラメータは明示的にoutとして宣言されます。

結論:

変数がメソッドへの参照によって渡されるときはいつでも、refおよびoutキーワードを使用できます。 一方、両方のキーワードを使用する理由は異なります。ここで、refキーワードを使用して、呼び出されたメソッドに渡されるrefキーワードの前の引数の値を変更し、outキーワードを使用して前の引数の値を戻すoutキーワードによる。

Top