【C#】クラスの「メソッド」を定義する方法:振る舞いを実装する基本

目次

クラスとメソッド(振る舞い)

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(成功/失敗)、intdecimal(計算結果の返却)など、目的に応じて使い分けます。
  • 引数: メソッドが動作するために必要な情報を外部から受け取ります。

プロパティ({ get; set; })が「データ(名詞)」の窓口であるとすれば、メソッドは「振る舞い(動詞)」の窓口であり、オブジェクト指向プログラミングの核となる要素です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次