c# indexer インデクサ

      2017/07/13

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キーワードは一つのクラスに一つしか使えません。

PR



 - C# 入門

Translate »