C# インデクサの基本

概要

C#のインデクサを使うと、クラスや構造体のオブジェクトを配列のように扱うことができます。これにより、オブジェクト内部のデータ構造に直感的にアクセスできるようになります。


サンプルコード

以下のコードは、SampleClass というクラスにインデクサを定義し、配列のように操作する例です。

public class SampleClass
{
    // 5つの整数を保存する配列
    private int[] numbers = new int[5];

    // インデクサの定義
    public int this[int index]
    {
        // 値を取得するとき
        get
        {
            return numbers[index];
        }
        // 値を設定するとき
        set
        {
            numbers[index] = value;
        }
    }
}

使い方

インスタンスの作成

まず、SampleClass のオブジェクトを作成します。

SampleClass sample = new SampleClass();

値の設定

インデクサを使用して、配列のように値を設定できます。

sample[0] = 10; // numbers[0] に 10 を代入
sample[1] = 20; // numbers[1] に 20 を代入

値の取得

同様に、インデクサを使って値を取得します。

Console.WriteLine(sample[0]); // 出力: 10
Console.WriteLine(sample[1]); // 出力: 20

インデクサの構造

構文

インデクサは this キーワードを使用して定義されます。

public データ型 this[引数の型 引数名]
{
    get
    {
        // 値を取得する処理
    }
    set
    {
        // 値を設定する処理
    }
}

  • this[int index]: 引数として整数のインデックスを受け取ります。
  • get: 指定されたインデックスの値を返します。
  • set: 指定されたインデックスに値を代入します。

このコードが便利な理由

  1. 直感的な操作
    クラスのオブジェクトを配列のように扱えるため、直感的にデータへアクセスできます。
  2. カプセル化の促進
    内部データ(例: 配列やリスト)を外部に直接公開せず、安全に操作できます。
  3. 追加のロジック
    必要に応じて、getset 内で値の検証や範囲チェックを行うことができます。

応用例

インデクサで範囲チェックを追加

インデクサを使って、不正なインデックスへのアクセスを防ぐ例です。

public int this[int index]
{
    get
    {
        if (index < 0 || index >= numbers.Length)
        {
            throw new IndexOutOfRangeException("インデックスが範囲外です。");
        }
        return numbers[index];
    }
    set
    {
        if (index < 0 || index >= numbers.Length)
        {
            throw new IndexOutOfRangeException("インデックスが範囲外です。");
        }
        numbers[index] = value;
    }
}

文字列インデクサ

インデクサの引数を整数以外の型(例: 文字列)にすることも可能です。

public class StringIndexer
{
    private Dictionary<string, string> data = new Dictionary<string, string>();

    public string this[string key]
    {
        get
        {
            return data.ContainsKey(key) ? data[key] : "キーが存在しません";
        }
        set
        {
            data[key] = value;
        }
    }
}

まとめ

  • インデクサは、オブジェクトを配列のように操作できる便利な機能です。
  • データのカプセル化やアクセスロジックをカスタマイズできるため、より安全で効率的なコードが書けます。
  • 必要に応じて範囲チェックやカスタムロジックを追加して、応用力を高めましょう。

関連キーワード

  • 配列
  • カプセル化
  • this キーワード
  • 範囲チェック

ni

C#,インデクサ

Posted by hidepon