ホームページ  >  記事  >  バックエンド開発  >  C# メソッドの 6 つのパラメーターに関する簡単な説明

C# メソッドの 6 つのパラメーターに関する簡単な説明

青灯夜游
青灯夜游転載
2019-11-25 16:37:134580ブラウズ

C# メソッドには、値パラメーター、参照パラメーター、出力パラメーター、パラメーター配列、名前付きパラメーター、およびオプションのパラメーターの 6 つのパラメーターがあります。以下の記事で紹介しますが、ある程度の参考価値はありますので、困っている友人の参考にしていただければ幸いです。

C# メソッドの 6 つのパラメーターに関する簡単な説明

#値パラメータ

値パラメータは、値をコピーすることにより、メソッドのデフォルトのタイプになります。データは仮パラメータの形式でメソッドに渡されます。メソッドが呼び出されるとき、システムは 2 段階の操作を実行します。

1. スタック上に仮パラメータ用のスペースを割り当てます。 。

2. 実パラメータを仮パラメータにコピーします。

1) メソッドが呼び出される前に、実パラメータとして使用される変数 a1 の参照がすでにスタック上にあります。

2) メソッドが開始されると、システムはスタック上に仮パラメータ用のスペースを割り当て、実際のパラメータから値をコピーします。

3) a1 は参照型であるため、参照がコピーされ、その結果、実パラメータと仮パラメータの両方がヒープ内の同じオブジェクトを参照します。

4) a2 は値型であるため、値がコピーされ、独立したデータが生成されます。

5) メソッドの実行後、仮パラメータがスタックからポップされます。

6) a2. 値の型、その値はメソッドの動作には影響されません。

7) a1. 参照型、その値はメソッドの動作によって変更されます。

参照パラメータ

1. 参照パラメータを使用する場合、メソッドの宣言と呼び出しで ref 修飾子を使用する必要があります。

2. 実パラメータは変数である必要があり、実パラメータとして使用する前に値を割り当てる必要があります。

値パラメータの場合、システムはスタック上の仮パラメータのメモリを割り当てます; 逆に、参照パラメータの場合、仮パラメータのパラメータ名は、実際のパラメータ変数、つまり、同じメモリ位置を指します。したがって、メソッドの実行中に仮パラメータに加えられた変更は、メソッドの実行が完了した後も有効です (実際のパラメータ変数に表示されます)。

参照パラメータの転送は、値型と参照型の両方に完全に転送され、値と参照のコピーはありません、つまり、同じメモリ位置が参照されます。

#出力パラメータ出力パラメータは、メソッド本体から呼び出しコードにデータを渡すために使用され、参照パラメータと非常によく似ています。

1. out 修飾子は、メソッドの宣言と呼び出しで使用する必要があります。

2. 参照パラメータと同様に、実際のパラメータは変数である必要があります。

参照パラメータと同様に、出力パラメータの仮パラメータは実際のパラメータのエイリアスとして機能します。メソッド内の仮パラメータへの変更は、メソッドの実行完了後に実際のパラメータ変数を通じて表示されます。

出力パラメータには、参照パラメータとは異なり、次の 2 つの要件があります。

1. メソッド内では、出力パラメーターは読み取られる前に値を割り当てる必要があります。つまり、パラメーターの初期値は無関係であるため、出力前に実際のパラメーターに値を割り当てる必要はありません。メソッドが呼び出されます。

2. メソッドが戻る前に、メソッドを通過する可能性のあるパスをすべての出力パラメータに一度割り当てる必要があります。


パラメータ配列上記の 3 つのパラメータ メソッドでは、1 つの実パラメータが 1 つの仮パラメータに厳密に対応する必要があります。パラメータの配列は異なります。これにより、ゼロ個以上の実パラメータが特別な仮パラメータに対応することが可能になります。

パラメータ配列の要件は次のとおりです:

1. パラメータ リストにはパラメータ配列が 1 つだけ存在できます。

2. 存在する場合、それはリストの最後のものでなければなりません。


パラメータ配列の宣言には、params 修飾子が必要です (呼び出しには修飾子は必要ありません)。また、それは 1 つの型の配列である必要があります。

分散パラメータの受け渡しを使用する場合、コンパイラは次の処理を実行します。

1) 実際のパラメータ リストを受け入れ、それらを使用して配列を作成および初期化します。

2) 配列の参照をスタック上の仮パラメータに保存します。

3) 対応する仮パラメータ グループの位置に実パラメータがない場合、コンパイラは使用する要素がゼロの配列を作成します。

4) 配列パラメーターが値型の場合、値はコピーされ、実際のパラメーターはメソッド内では影響を受けません。

5) 配列パラメーターが参照型の場合、その参照がコピーされ、実際のパラメーターによって参照されるオブジェクトがメソッド内で影響を受ける可能性があります。

配列パラメータの受け渡しを使用する場合、コンパイラはデータを再作成する代わりにデータを使用します。これは参照パラメータに相当します。

名前付きパラメータ上で使用した 4 つのパラメータはすべて位置パラメータです。つまり、各実際のパラメータの位置は同じである必要があります。 1 つは、対応する仮パラメータの位置に対応します。

.Net4.0 からは、指定したパラメータの名前が表示されていれば、メソッド呼び出し内で実パラメータを任意の順序で列挙できるようになりました。

1. メソッドの宣言に違いはありません。仮パラメータにはすでに名前が付いています。

2. ただし、メソッドを呼び出す場合、仮パラメータの名前の後にコロンと実際のパラメータ値または式が続きます。

呼び出し時には、位置パラメータと名前付きパラメータを混合することもできますが、すべての位置パラメータを最初にリストする必要があります。

オプションのパラメータ

オプションのパラメータは .Net4.0 でのみ追加されました。メソッドを呼び出すときにこのパラメータを含めることも、省略することもできます。

パラメータがオプションであることを示すには、メソッドの宣言時にパラメータのデフォルト値を指定する必要があります。デフォルト値を指定する構文は、ローカル変数を初期化する場合と同じです。

以下に示すように

1) 仮パラメータ b はデフォルト値に設定されます。

2) したがって、メソッドを呼び出すとき、パラメーターは 1 つだけあり、メソッドは 2 番目のパラメーターの初期化として 3 を使用します。

オプション パラメーターの宣言に関しては、いくつかの重要な事項があります:

1. すべてのパラメーター タイプをオプション パラメーターとして使用できるわけではありません。

1) 値型のデフォルト値がコンパイル時に決定できる限り、値型をオプションのパラメータとして使用できます。

2). 参照型は、デフォルト値が null の場合にのみオプションのパラメーターとして使用できます。

3). オプションのパラメータは値パラメータのみです。

2. すべての必須パラメータは、オプションのパラメータを宣言する前に宣言する必要があります。params パラメータがある場合は、すべてのオプションのパラメータの後に宣言する必要があります。

3. オプションのパラメータ リストの最後から先頭まで省略する必要があります。省略しないと、パラメータのあいまいさが生じます。

4. パラメーターの曖昧さを排除したい場合は、名前付きパラメーターとオプションのパラメーターの機能を組み合わせることができます。

以下に示すように

この記事は C#.Net チュートリアル 列から引用したものです。ぜひ学習してください。

以上がC# メソッドの 6 つのパラメーターに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。