クラスの添え字アクセスに対応する - インデクサーに対応するクラスの実装 (インデクサの実装) - C#
インデクサーに対応するクラスを作成するコードを紹介します。
プログラム例 (getの例)
UI
下図のUIを作成します。ButtonとMultiLineプロパティをtrueにしたTextBoxを配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace IndexerClass
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClass m = new MyClass();
textBox1.Text = "値:" + Convert.ToString(m[3]);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IndexerClass
{
public class MyClass
{
private int[] Values;
public MyClass()
{
Values = new int[5];
Values[0] = 10;
Values[1] = 20;
Values[2] = 150;
Values[3] = 1000;
Values[4] = 400;
}
public int this[int index]
{
get
{
if (index < Values.Length) {
return Values[index];
}
else {
return -1;
}
}
}
}
}
解説
クラスのインデクサを実装する場合はthisプロパティを実装します。
今回の実装例では、インデクサに与えられた数値の位置のValues配列の値を返す実装をしています。
フォーム側でMyClass[3]を指定しているため、戻り値はValues[3]の"1000"になります。
public int this[int index]
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[Button1]をクリックします。インデクサに与えられた数値から値を取得し、"1000"がテキストボックスに表示されます。
プログラム例2 (setの例)
UI
下図のUIを作成します。ButtonとMultiLineプロパティをtrueにしたTextBoxを配置します。
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace IndexerClass
{
public partial class FormSet : Form
{
public FormSet()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClassRW m = new MyClassRW();
textBox1.Text = "値:" + Convert.ToString(m[2]) + "\r\n";
m[2] = 25;
textBox1.Text += "値:" + Convert.ToString(m[2]) + "\r\n";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IndexerClass
{
public class MyClassRW
{
private int[] Values;
public MyClassRW()
{
Values = new int[5];
Values[0] = 10;
Values[1] = 20;
Values[2] = 150;
Values[3] = 1000;
Values[4] = 400;
}
public int this[int index]
{
get
{
if (index < Values.Length) {
return Values[index];
}
else {
return -1;
}
}
set
{
if (index < Values.Length) {
Values[index] = value;
}
}
}
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[Button1]をクリックします。インデクサに与えられた数値から値を取得し、値がテキストボックスに表示されます。インデクサを利用した値の代入もできていることが確認できます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用