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

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

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), new FailSoftArray(5) };//クラスの配列

            int x;

            // エラーを表示
            Console.Write("\nFail with error reports.");
            for (int j = 0; j < fs.Length; j++)//クラスの配列の添え字を変えます
            {
                for (int i = 0; i < fs[j].Length; i++)//クラスの配列の要素の添え字を変えます
                {
                    fs[j][i] = i * 10; //set 二次元の配列と同じでは?
                    if (fs[j].ErrFlag)
                        Console.Write("\nfs[" + j + "][" + i + "] out-of-bounds");
                }
            }
            for (int j = 0; j < fs.Length; j++)
            {
                for (int i = 0; i < fs[j].Length; i++)
                {
                    x = fs[j][i];      //get
                    Console.WriteLine();
                    if (!fs[j].ErrFlag)
                        Console.Write(x);
                    else
                        Console.Write("fs[" + j + "][" +i + "] out-of-bounds");
                }
            }
            Console.WriteLine();
        }
    }
}


 直観として、二次元の配列と同じく使えそうと思いました。次には、このクラスの加算をやって見たいと思います。取り敢えずは、要素の大きさを同じとして、簡単にします。要するにfs[2] = fs[0] + fs[1]と書いて、fs[2] = {0,20,40,60,80}となれば、加算したことになりますね。


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

コメントを投稿

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

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