目次
クラスとメソッド(振る舞い)
C#の「クラス(class)」は、データ(状態)と振る舞い(アクション)を一つにまとめた設計図です。
- データ(状態):
privateな「フィールド」やpublicな「プロパティ」で表されます。(例:string Name,int Health) - 振る舞い(アクション): 「メソッド(Method)」によって定義されます。
メソッドとは、クラス(またはオブジェクト)に属する「関数」のことです。メソッドは、そのクラスの内部データ(フィールドやプロパティ)を操作したり、特定の計算を行ったり、何らかのアクションを実行したりするために使用されます。
この記事では、クラスの振る舞いを定義するメソッドの基本的な構文と、その使い方を解説します。
メソッドの基本構文
メソッドは、クラスの{ ... }の内部に、以下の構文で定義します。
[アクセス修飾子] [戻り値の型] [メソッド名]([引数リスト])
{
// 実行される処理
// (戻り値の型が void でなければ return 文が必要)
}
- アクセス修飾子:
public(外部から呼び出し可能)やprivate(クラス内部からのみ)などを指定します。 - 戻り値の型: メソッドが処理を終えた後に返す値の型。何も返さない場合は
voidを指定します。bool(成功/失敗)やint(計算結果)なども返せます。 - メソッド名: その振る舞いを表す動詞(例:
Calculate,Save,Print)で命名するのが一般的です。 - 引数リスト: メソッドが処理を行うために外部から受け取るデータ。
クラス定義と実行の例
「銀行口座(BankAccount)」クラスを例に、メソッドの定義と使い方を見ていきます。このクラスは「口座番号」と「残高」というデータを持ち、「入金する」「出金する」「残高を取得する」というメソッド(振る舞い)を持ちます。
BankAccount クラスの定義
Deposit(入金)、Withdraw(出金)、GetCurrentBalance(残高照会)という3つの異なるタイプのメソッドを定義します。
using System;
using System.Globalization;
/// <summary>
/// 銀行口座を表すクラス
/// </summary>
public class BankAccount
{
// 1. private なフィールド (内部データ)
// クラスの外部からは直接操作できない
private decimal _balance;
// 2. public なプロパティ (読み取り専用)
public string AccountNumber { get; }
// 3. コンストラクタ (初期化)
public BankAccount(string accountNumber, decimal initialDeposit)
{
this.AccountNumber = accountNumber;
this._balance = initialDeposit;
}
// --- 4. メソッド (振る舞い・アクション) ---
/// <summary>
/// (メソッド1) 口座に入金する
/// 戻り値の型: void (何も返さない)
/// 引数: decimal amount (入金額)
/// </summary>
public void Deposit(decimal amount)
{
// 入金額が0以下なら処理を中断
if (amount <= 0)
{
Console.WriteLine("入金額は0より大きくなければなりません。");
return; // メソッドをここで終了
}
// 内部データ (_balance) を操作
this._balance += amount;
Console.WriteLine($"入金: {amount:C}。 (新残高: {this._balance:C})");
}
/// <summary>
/// (メソッド2) 口座から出金する
/// 戻り値の型: bool (成功/失敗を返す)
/// 引数: decimal amount (出金額)
/// </summary>
public bool Withdraw(decimal amount)
{
if (amount <= 0)
{
Console.WriteLine("出金額は0より大きくなければなりません。");
return false; // 失敗
}
// 残高が不足しているかチェック
if (this._balance < amount)
{
Console.WriteLine("残高が不足しています。出金できません。");
return false; // 失敗
}
// 内部データ (_balance) を操作
this._balance -= amount;
Console.WriteLine($"出金: {amount:C}。 (新残高: {this._balance:C})");
return true; // 成功
}
/// <summary>
/// (メソッド3) 現在の残高を取得する
/// 戻り値の型: decimal (残高を返す)
/// 引数: なし
/// </summary>
public decimal GetCurrentBalance()
{
// 内部データを外部に返す
return this._balance;
}
}
メソッドの呼び出し
定義したクラス(設計図)は、newキーワードでインスタンス化(オブジェクトを生成)し、[変数名].[メソッド名]() の形式で呼び出して使用します。
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
// 日本円 (C: 通貨) の書式設定
CultureInfo.CurrentCulture = new CultureInfo("ja-JP");
// 1. BankAccount クラスをインスタンス化(初期残高10000円)
var account1 = new BankAccount("123-456789", 10000m);
Console.WriteLine($"口座 {account1.AccountNumber} を開設しました。");
// 2. メソッドの呼び出し (void)
account1.Deposit(5000m); // 5000円入金
// 3. メソッドの呼び出し (bool)
bool success = account1.Withdraw(3000m); // 3000円出金
Console.WriteLine($"出金成功: {success}");
// 4. 失敗するメソッド呼び出し (bool)
bool failure = account1.Withdraw(20000m); // 残高不足
Console.WriteLine($"出金成功: {failure}");
// 5. 値を返すメソッドの呼び出し (decimal)
decimal finalBalance = account1.GetCurrentBalance();
Console.WriteLine("---");
Console.WriteLine($"最終残高: {finalBalance:C}");
}
}
出力結果:
口座 123-456789 を開設しました。
入金: ¥5,000。 (新残高: ¥15,000)
出金: ¥3,000。 (新残高: ¥12,000)
出金成功: True
残高が不足しています。出金できません。
出金成功: False
---
最終残高: ¥12,000
まとめ
メソッドは、クラスの「振る舞い」を定義する機能ブロックです。
- カプセル化:
privateなフィールド(データ)を、publicなメソッド(ロジック)を通じて安全に操作させることができます。(例:Withdrawメソッドが残高不足をチェックする) - 戻り値:
void(アクションのみ)、bool(成功/失敗)、intやdecimal(計算結果の返却)など、目的に応じて使い分けます。 - 引数: メソッドが動作するために必要な情報を外部から受け取ります。
プロパティ({ get; set; })が「データ(名詞)」の窓口であるとすれば、メソッドは「振る舞い(動詞)」の窓口であり、オブジェクト指向プログラミングの核となる要素です。
