みなさん、今晩は。
只今、インデクサについて勉強しているのですが、一つ気になることがあります。
インデクサはオーバーロードできるのかということです。
MSDNのインデクサの概要には、「インデクサはオーバーロードできません。」と書かれていましたが、
私がいつも勉強させて頂いているサイト様ではオーバーロードできますと書かれていました。
ためしに、サンプルを作って実行して見ましたが、オーバーロードできているように思えます。
見れたものじゃないですが、下記のようなサンプルを実行しました。
実行環境
.NetFramework 1.1
Visual Studio .NET 2003
using System;
using System.Collections;
namespace ConsoleApplication
{
class Sample
{
private int[] age;
private Hashtable name = new Hashtable();
public int this[int index]
{
get
{
return age[index];
}
set
{
if (value >= 0) this.age[index] = value;
}
}
public string this[string nm]
{
get
{
return (string)name[nm];
}
set
{
name[nm] = value;
}
}
public Sample(int i) // コンストラクタ
{
age = new int[i];
}
}
class MyClass
{
public static void Main()
{
int[] age = {20,22,23};
string[] name = {"toro","momiji","nobu"};
Sample obj = new Sample( age.Length );
for (int i =0; i < age.Length; i++)
{
obj[i] = age[i];
}
foreach (string s in name)
{
obj[s] = s;
}
// ****** 値の確認 ******
for (int i =0; i < age.Length; i++)
{
Console.WriteLine("私は {0} 歳です。", obj[i]);
}
foreach (string s in name)
{
Console.WriteLine("名前は {0} です。", obj[s]);
}
}
}
}
これは、オーバーロードできてると理解してもよろしいのでしょうか(^^;