工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#インデクサー:オブジェクトを配列のように振る舞わせる

インデクサーを使用すると、オブジェクトを配列のようにインデックス指定できます。クラスにインデクサーを定義すると、そのクラスは仮想配列のように振る舞います。その後、配列アクセス演算子([ ])を使用して、このクラスのインスタンスにアクセスできます。

構文

1次元インデクサーの構文は以下の通りです。

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

インデクサーの使用

インデクサーの振る舞い宣言は、プロパティとある程度似ています。プロパティと同様に、getとsetアクセサーを使用してインデクサーを定義します。しかし、プロパティが特定のデータメンバーを返したり設定したりするのに対し、インデクサーはオブジェクトインスタンスから特定の値を返したり設定したりします。言い換えれば、インスタンスデータをより小さな部分に分割し、各部分にインデックスを付け、各部分を取得または設定します。

プロパティ定義にはプロパティ名を指定します。インデクサーは名前ではなく、オブジェクトインスタンスを参照するthisキーワードで定義されます。次の例で概念を示します。

Live Demo
 using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { 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) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; for ( int i = 0; i < IndexedNames.size; i++ ) { Console.WriteLine(names[i]); } Console.ReadKey(); } } } 

上記コードをコンパイル・実行すると、以下の結果が得られます。

 Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 

オーバーロードされたインデクサー

インデクサーはオーバーロードできます。また、複数のパラメータで宣言でき、各パラメータは異なる型にできます。インデックスが整数である必要はありません。C#では、文字列など他の型をインデックスとして使用できます。

次の例はオーバーロードされたインデクサーを示します。

Live Demo
 using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { 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; } } } public int this[string name] { get { int index = 0; while(index < size) { if (namelist[index] == name) { return index; } index++; } return index; } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; // intパラメータの最初のインデクサーを使用 for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } // stringパラメータの2番目のインデクサーを使用 Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } } 

上記コードをコンパイル・実行すると、以下の結果が得られます。

 Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2 

C言語

  1. C# Hello World – 初めてのC#アプリケーション構築
  2. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  3. C# 変数とプリミティブデータ型:完全マスターガイド
  4. C#演算子完全ガイド:C#における演算子の包括的解説
  5. C# ビット演算子とビットシフト演算子をマスターする:包括的ガイド
  6. C# 入出力の基礎:ユーザー入力と出力の基本をマスター
  7. C# の式、文、ブロック:実践例で徹底理解
  8. C# コメントをマスターする:種類、ベストプラクティス、XML ドキュメント
  9. C# switch 文をマスターする:構文、例、ベストプラクティス
  10. C# 三項演算子:条件式を簡潔に書くためのガイド
  11. C# break 文:使い方とタイミングを徹底解説