indexer インデクサ c# 入門
indexer インデクサ
インデクサとはオブジェクトを配列みたいに扱えることです。
オブジェクトとはクラスのインスタンスのことですね。
具体的にはオブジェクトの配列みたいに
使用することができます。
サンプルC#
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 WindowsFormsApplication10
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
person taro = new person();
taro[0] = 20;
taro._name = “taro”;
Console.Write(taro[1] + taro._name);
}
class person
{
int[] age = new int[1];
string name;
public int this[int i]
{
get
{
return age[i];
}
set
{
age[i] = value;
}
}
public string _name
{
get
{
return name;
}
set
{
name = value;
}
}
}
}
}
実行結果は
20taro
ここではageのプロパティだったところを書き換えてます。
nameはプロパティのままです。
配列みたいに扱えると言いましても複数定義できるわけありませんね。
一つのクラスには一つしか書けないです。
public int this[int i]
{
get
{
return age[i];
}
set
{
age[i] = value;
}
}
thisキーワードに型になってますね。
このサンプルでは一つしか値を書いてませんが複数書けます。
taro[0] = 20;
インスタンス名[添え字] = 値
これが配列みたいに扱えるということです。
int[] age = new int[1];
ここで複数宣言してたら
taro[1] = 12;
とかも書きますね。
アクセスも
taro[1] で出来ていますね。
オブジェクトを配列みたいに扱えますね。
vbも解説します。
サンプルvb
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim taro As New person
taro(0) = 20
taro._name = “taro”
Console.Write(taro._age(0) & taro._name)
End Sub
Class person
Dim age(1) As Integer
Dim name As String
Public Sub New()
End Sub
Default Public Property _age(ByVal i As Integer) As Integer
Get
Return age(i)
End Get
Set(ByVal value As Integer)
age(i) = value
End Set
End Property
Public Property _name As String
Get
Return name
End Get
Set(ByVal value As String)
name = value
End Set
End Property
End Class
End Class
実行結果は
20taro
vbではthisではなく
Defaultキーワードを使います。
Defaultキーワードは一つのクラスに一つしか使えません。