たとえばコレクションのような役割を果たすクラス「TestClass」があり、このクラスのインスタンス「myTest」があったとします。このとき、あたかも配列のように、「myTest(0)」(C#では「myTest[0]」)でその番号に登録されている値を取得できたり、設定できたりすると便利だと思いませんか?ここではそれを可能にする方法を紹介します。
VB.NETの場合、下記のようにDefaultを付けて既定のプロパティを宣言することにより、可能です。
'クラスを宣言 Public Class SampleClass Dim myStrings() As String Public Sub New(ByVal capacity As Integer) 'コンストラクタで配列を作成する myStrings = New String(capacity) {} End Sub '既定のプロパティを宣言する '既定のプロパティはパラメータ(下の例ではindex)を1つ持つ必要がある Default Public Property Item(ByVal index As Integer) As String Get Return myStrings(index) End Get Set(ByVal Value As String) myStrings(index) = Value End Set End Property End Class
このクラスの使用例は、以下のようになります。
'インスタンスを作成 Dim myTest As New SampleClass(9) '既定のプロパティを使って、Itemプロパティを設定 'もちろん「myTest.Item(3) = "さん"」でもよい myTest(3) = "さん" '既定のプロパティを使って、Itemプロパティを取得 'もちろん「Console.WriteLine(myTest.Item(3))」でもよい Console.WriteLine(myTest(3))
C#では、インデクサを用います。以下にその例を示します。
//クラスを宣言 public class SampleClass { string[] myStrings; public SampleClass(int capacity) { //コンストラクタで配列を作成する myStrings = new string[capacity]; } //インデクサ public string this[int index] { get { return myStrings[index]; } set { myStrings[index] = value; } } }
このクラスの使用例は、以下のようになります。
//インスタンスを作成 SampleClass myTest = new SampleClass(9); //インデクサを使って、値を設定 myTest[3] = "さん"; //インデクサを使って、値を取得 Console.WriteLine(myTest[3]);
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。