C#における引数(パラメータ)の渡し方:値渡し・参照渡し・out・paramsを徹底解説
C#では、メソッドに引数(パラメータ)を渡す方法として、「値渡し」と「参照渡し」の2つが基本となります。さらに、outパラメータやparams配列を活用することで、より柔軟な引数の受け渡しが実現できます。それぞれの仕組みと使い分けのポイントを詳しく見ていきましょう。
値渡し(Value)
値渡しは、引数の実際の値をメソッドの仮引数にコピーする方法です。この場合、メソッド内部でパラメータに対して行った変更は、呼び出し元の引数には一切影響しません。元のデータを保護したい場合に適した方法です。
参照渡し(Reference)
参照渡しは、引数のメモリ上の場所への参照を仮引数にコピーする方法です。C#ではrefキーワードを使用します。この場合、メソッド内でパラメータに加えた変更が、そのまま呼び出し元の引数に反映されます。大きなデータ構造を扱う際や、メソッド内で元の値を直接書き換えたい場合に便利です。
outパラメータ
returnステートメントでは、メソッドから返せる値は基本的に1つだけです。しかし、出力パラメータ(out)を使えば、1つのメソッドから複数の値を返すことができます。outパラメータは参照パラメータとよく似ていますが、データをメソッド「へ」渡すのではなく、メソッド「から」取り出すために使うという点が大きな違いです。
params配列(可変長引数)
メソッドを宣言する時点で、実際にいくつの引数が渡されるか不明なケースがあります。そんなときに役立つのが、C#のparamsキーワードによる可変長引数配列です。呼び出し側は任意の個数の引数をカンマ区切りで渡せるため、非常に柔軟なAPI設計が可能になります。
以下は、C#でparamsを実装する方法を学べる完全なサンプルコードです。可変個の整数を受け取り、その合計値を計算して返しています。
サンプルコード
using System;
namespace Program {
class ParamArray {
public int AddElements(params int[] arr) {
int sum = 0;
foreach (int i in arr) {
sum += i;
}
return sum;
}
}
class Demo {
static void Main(string[] args) {
ParamArray app = new ParamArray();
int sum = app.AddElements(300, 250, 350, 600, 120);
Console.WriteLine("The sum is: {0}", sum);
Console.ReadKey();
}
}
}
この例では、AddElementsメソッドがparams int[]によって5つの整数を受け取り、合計値1620を出力します。このようにparamsを使えば、引数の個数に応じて配列が自動的に生成されるため、オーバーロードを大量に定義する必要がなくなります。
-
JavaScriptの関数パラメーターとは?基本の使い方を実例つきで解説
JavaScriptでは、関数を呼び出すときにさまざまな値(引数)を渡すことができます。渡された引数は関数の内部で受け取ることができ、その値に対して自由に処理を行うことが可能です。関数パラメーターの基本関数は、カンマで区切ることで複数のパラメーターを受け取ることができます。パラメーターとは、関数が呼び出されたときに外部から渡される値を受け取るための変数のことです。たとえば「名前」と「年齢」という2つの情報を使いたい場合、次のように関数定義時に2つのパラメーターを指定します。function sayHello(name, age) { // nameとageを使った処理をここに書く }実行例
-
Androidのインテントには何種類ある?明示的・暗黙的インテントの違いと実装方法を徹底解説
インテント(Intent)とは?インテントの種類を学ぶ前に、まず「インテントとは何か」を理解しておきましょう。インテントとは、特定のアクションを実行するための仕組みであり、主に以下のような目的で使用されます。アクティビティ(Activity)の起動ブロードキャストレシーバーへの送信サービス(Service)の開始2つのアクティビティ間でのメッセージ(データ)の受け渡しAndroidで使用できるインテントは、「明示的インテント(Explicit Intent)」と「暗黙的インテント(Implicit Intent)」の2種類です。明示的インテント(Explicit Intent)とは明示的インテ