メソッドはクラス内で定義される関数です。C# は豊富なパラメータ機能をサポートしており、オプション/名前付き引数、ref/out/in 修飾子、params 配列が含まれます。また、メソッドオーバーロード(同じ名前だが異なるパラメータを持つ複数のメソッド)もサポートしています。
public int Add(int a, int b) => a + b; // expression-bodied (concise)
public string Greet(string name, string greeting = "Hello") // default parameter
{
return $"{greeting}, {name}";
}
Greet("Ann"); // "Hello, Ann"
Greet("Ann", greeting: "Hi"); // named argument
メソッドは戻り値の型、名前、パラメータを指定します。デフォルトパラメータは引数をオプションにし、名前付き引数では名前で渡すことができ(わかりやすく、オプショナルをスキップ可能)。
// ref — pass by reference (method can modify the caller's variable)
void Increment(ref int x) { x++; }
int n = 5; Increment(ref n); // n is now 6
// out — for returning multiple values (must be assigned in the method)
bool TryParse(string s, out int result) { result = ...; return true; }
if (int.TryParse("42", out int value)) { } // the common TryX pattern
// in — pass by reference but READ-ONLY (performance for large structs)
void Process(in LargeStruct data) { }
out はTryParse パターンで広く使われています(成功フラグと結果を安全に返す);ref は呼び出し元の変数を変更できます;in は大きな構造体をコピーなしで効率的に渡します。
// params — variable number of arguments
int Sum(params int[] numbers) => numbers.Sum();
Sum(1, 2, 3, 4); // any number
// OVERLOADING — same name, different parameters
void Print(int x) { }
void Print(string s) { }
void Print(int x, int y) { }
Print(5); // calls the int version — resolved by argument types
オーバーロードにより、複数のメソッドが同じ名前を共有でき、パラメータの型/数で区別されます。コンパイラが一致するものを選択します。params は可変数の引数を受け入れます。
メソッドは C# の動作の基本的な構成要素であり、豊富なパラメータ機能を理解することは、柔軟で表現力豊かなコードを書くために重要です。
メソッドの定義方法(簡潔な式形式のメソッド構文を含む)、デフォルトパラメータと名前付きパラメータの使用(オプション引数と読みやすい呼び出しのため)、およびメソッドオーバーロード(同じ名前、異なるパラメータ - 異なる引数型に対応する直感的な API のため)の適用を理解することは、日常の知識です。
パラメータ修飾子は特に理解することが重要です:out はTryParse パターン(int.TryParse(s, out var result) - 成功フラグと結果を例外なく安全に返す、一般的で慣用的な C# パターン)で広く使われています。ref は呼び出し元の変数を変更できます。in はパフォーマンスのため大きな構造体を参照で渡します。
これらを理解すること - メソッド、パラメータ機能(オプション/名前付き/params)、柔軟な API のためのオーバーロード、および ref/out/in 修飾子(特に out ベースの TryParse イディオム)- は、C# メソッドを書くこと、およびこれらの機能に依存する多くの .NET API を使うことの両方の基礎です。
メソッドとそのパラメータはすべての C# コードの中心であり、オーバーロード、オプションパラメータ、TryX パターンなどの機能が絶えず現れるため、それらを習得することは効果的な C# 開発のための必須の、中心的な知識です。