へたれの日々

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

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

記事カテゴリ

書庫

日記カテゴリ

リンク

インデクサは、オブジェクトを配列のように扱うことができます。

メソッドやプロパティは static にすることができましたが、インデクサではせきません。

  • データ型 this [ int Index , .... ]
    {
        get
        {
            return メンバ変数名[index];
        }
        set
        {
            メンバ変数名[index] = value;
        }
    }

 

インデクサには見ての通り名前がありません。その代わり this が使用されています。

この this の隣にはパラメータが指定されていますが、データ型は int 型以外にも様々な型が使用できます。

パラメータは、複数宣言することもでき、2次元の配列を扱いたいときに使用します。

get/set アクセサはプロパティと同様の扱いなので、ここでは詳しく触れません。

プロパティは名前で識別されていましたが、インデクサはシグネチャで識別されます。

シグネチャで識別されるということは、オーバーロードすることが可能です。

しかし、MSDNでは 「インデクサはオーバーロードできません。と記述されていました。

(これは誤訳だったようです。)

 

より詳しく知りたい方は ここ を参照してください。

 

 

//サンプル39

using System;
using System.Collections;

namespace ConsoleApplication
{
    class IndexerSample
    {
        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]; // string 型にキャスト
            }
            set
            {
                name[nm] = value;
            }
        }

        public IndexerSample(int i) // コンストラクタ
        {
            age = new int[i];
        }
    }

    class Sample39
    {
        public static void Main()
        {
            int[] age = {20,22,23};
            string[] name = {"toro","momiji","nobu"};

            IndexerSample obj = new IndexerSample( age.Length );
           
            for (int i =0; i < age.Length; i++)
            {// シグネチャのあったインデクサが呼び出されます。
                obj[i] = age[i]; // パラメータが int 型のインデクサが呼び出されます。
            }

            foreach (string s in name)
            {
                obj[s] = s; // パラメータが string 型のインデクサが呼び出されます。
            }

            // ****** 値の確認 ******
            for (int i =0; i < age.Length; i++)
            {
                Console.WriteLine("私は {0} 歳です。", obj[i]);
            }

            foreach (string s in name)
            {
                Console.WriteLine("名前は {0} です。", obj[s]);
            }

        }
    }
}

 

投稿日時 : 2007年1月24日 14:17

コメント

# OTGwrKQudc 2014/07/19 14:48 http://crorkz.com/
Vr7AEx Enjoyed every bit of your article post. Really Great.

# YOGMGmowla 2014/08/06 21:01 http://crorkz.com/
Z3Ctot Thanks for sharing, this is a fantastic blog post.Really looking forward to read more. Fantastic.

# kXCwVGmXBM 2014/09/06 19:57 http://www.investleaks.com
Wow, wonderful weblog structure! How lengthy have you been blogging for? you make blogging glance easy. The whole look of your website is wonderful, as neatly as the content!

# XMOXQjoyXUSDc 2014/09/09 19:16 http://www.arrasproperties.com/4009-e-3rd-st-apt-3
you may have an excellent blog here! would you prefer to make some invite posts on my weblog?

# ySoAMQlAne 2014/09/11 17:39 http://swiss-vps.com/products/windows-vps/
Of course, what a fantastic website and educative posts, I surely will bookmark your website.Best Regards!

コメントの投稿

タイトル:
名前:
Url:
コメント: