C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のインデクサーとは?基本構文と実装例をわかりやすく解説

インデクサーとは

C#のインデクサー(indexer)は、クラスのオブジェクトに対して、配列と同じように「[ ]」を使ってインデックスでアクセスできるようにする機能です。これにより、内部に持つデータのコレクションへ、直感的かつ安全に読み書きを行うことができます。

インデクサーの基本的な構文は次のとおりです。

基本構文

element-type this[int index] {
    // get アクセサー:index で指定された値を返す
    get {
    }
    // set アクセサー:index で指定された位置に値を設定する
    set {
    }
}

インデクサーは this キーワードを使って定義し、get アクセサーで値の取得、set アクセサーで値の設定をそれぞれ制御します。アクセサー内に範囲チェックなどの独自ロジックを記述できるのが大きな特徴です。

C#でのインデクサー実装例

以下は、文字列型の配列を保持するクラスにインデクサーを実装した例です。範囲外のインデックスが指定された場合には空文字を返すようになっています。

using System;
namespace Demo {
    class Program {
        private string[] namelist = new string[size];
        static public int size = 10;
        public Program() {
            for (int i = 0; i < size; i++)
                namelist[i] = "N. A.";
        }
        public string this[int index] {
            get {
                string tmp;
                if( index >= 0 && index <= size-1 ) {
                    tmp = namelist[index];
                } else {
                    tmp = "";
                }
                return ( tmp );
            }
            set {
                if( index >= 0 && index <= size-1 ) {
                    namelist[index] = value;
                }
            }
        }
        static void Main(string[] args) {
            Program names = new Program();
            names[0] = "Tom";
            names[1] = "Jacob";
            names[2] = "Jack";
            names[3] = "Amy";
            names[4] = "Katy";
            names[5] = "Taylor";
            names[6] = "Brad";
            names[7] = "Scarlett";
            names[8] = "James";
            for ( int i = 0; i < Program.size; i++ ) {
                Console.WriteLine(names[i]);
            }
            Console.ReadKey();
        }
    }
}

このプログラムでは、コンストラクターですべての要素を「N. A.」で初期化した後、インデクサー経由で9人分の名前を設定しています。最後の1要素は初期値のまま残るため、出力には「N. A.」が表示されます。

実行結果

Tom
Jacob
Jack
Amy
Katy
Taylor
Brad
Scarlett
James
N. A.

まとめ

  • インデクサーを使うと、オブジェクトを配列のように [ ] で操作できます。
  • 定義には this キーワードを使用し、getset アクセサーで動作を制御します。
  • 範囲チェックなどのバリデーションを組み込むことで、安全なデータアクセスが可能になります。
  1. C#のコンテキストキーワードとは?意味と一覧をわかりやすく解説

    C#のコンテキストキーワードとはC#では、コード内で使用される文脈(コンテキスト)によって特別な意味を持つ識別子が存在します。代表的な例が、プロパティのアクセサーとして使われる「get」や「set」です。このように、特定の場面でのみキーワードとして機能する語を「コンテキストキーワード」と呼びます。コンテキストキーワードは、通常の予約語(class や int など)とは異なり、常に予約されているわけではありません。そのため、変数名やメソッド名などの識別子としても自由に使用できるのが大きな特徴です。コンテキストキーワードの一覧以下は、C#で定義されている主なコンテキストキーワードの一覧です。コン

  2. C#のConditional属性(条件付き属性)とは?基本構文と使い方を実例で解説

    属性(Attribute)は、プログラムにメタデータを追加するための仕組みです。コンパイラへの指示や、コメント・説明文、メソッドやクラスに関する付加情報などをコードに埋め込むことができます。Conditional属性とはConditional属性は、あらかじめ定義されている属性の一つで、指定したプリプロセッサ識別子(シンボル)が定義されている場合にのみ実行される「条件付きメソッド」をマークします。この属性を使用すると、Debug や Trace など、指定されたシンボルの値に応じてメソッド呼び出しの条件付きコンパイルが行われます。たとえば、デバッグ中に変数の値を表示したい場合などに活用できます