へたれの日々

.NETとへたれな僕の奮闘日記

  ホーム :: 連絡をする :: 同期する  :: Login
投稿数  6  :: 記事 38 :: コメント 3571 :: トラックバック 2

記事カテゴリ

書庫

日記カテゴリ

リンク

2007年1月24日 #

みなさん、今晩は。

只今、インデクサについて勉強しているのですが、一つ気になることがあります。

インデクサはオーバーロードできるのかということです。

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]);
            }
        }
    }
}

 

これは、オーバーロードできてると理解してもよろしいのでしょうか(^^;

 

posted @ 16:40 | Feedback (774)