新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

VS2019,独習C#第3版P262インデクサ

2020-03-08 09:07:01 | C#、VBなど

using System;

namespace Chapter01All
{
    // 改良されたフェイルソフトな配列
    // インデクサを追加して、フェイルソフトな配列を改良する
    class FailSoftArray
    {
        int[] a; // 配列への参照

        public int Length; // 変数Lengthはpublic

        public bool ErrFlag; // 直前の操作の結果を表すフラグ

        // サイズを指定して配列を作る
        public FailSoftArray(int size)
        {
            a = new int[size];
            Length = size;
        }

        // FailSoftArrayオブジェクトのためのインデクサ
        public int this[int index]
        { //←FailSoftArrayに対するインデクサ
          // getアクセサ
            get
            {
                if (ok(index))
                {
                    ErrFlag = false;
                    return a[index];
                }
                else
                {
                    ErrFlag = true;
                    return -1;
                }
            }

            // setアクセサ
            set
            {
                if (ok(index))
                {
                    a[index] = value;
                    ErrFlag = false;
                }
                else ErrFlag = true;
            }
        }

        // インデックスが配列の上限・下限の範囲内ならtrueを返す
        private bool ok(int index)
        {
            if (index >= 0 & index < Length) return true;
            return false;
        }
    }

    class ImprovedFSDemo
    {
        public static void Main()
        {
            FailSoftArray fs = new FailSoftArray(5);
            int x;

            // エラーを表示
            Console.Write("\nFail with error reports.");
            for (int i = 0; i < (fs.Length * 2); i++)
            {
                fs[i] = i * 10; //set
                if (fs.ErrFlag)
                    Console.Write( "\nfs[" + i + "] out-of-bounds");
            }

            for (int i = 0; i < (fs.Length * 2); i++)
            {
                x = fs[i];      //get
                Console.WriteLine();
                if (!fs.ErrFlag)
                    Console.Write(x);
                else
                    Console.Write("fs[" + i + "] out-of-bounds");
            }
            Console.WriteLine();
        }
    }
}


 前の課題ではメソッドGetとPutで行っていたことをfs[i]で、やってますね。特殊な演算子オーバーロードと言えるんでしょうか?


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« VS2019のC#で遊んでました。... | トップ | VS2019,独習C#第3版P262イン... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

C#、VBなど」カテゴリの最新記事