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

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

VS2019で独習C#第3版P262インデクサ、演算子オーバーロードやって見ました。

2020-03-08 19:39:17 | C#、VBなど

using System;

namespace Chapter01All
{
    // 改良されたフェイルソフトな配列
    // インデクサを追加して、フェイルソフトな配列を改良する
    
    class FailSoftArray
    {
        int[] a; // 配列への参照
        public int Length; // 変数Lengthはpublic
        public bool ErrFlag; // 直前の操作の結果を表すフラグ
        public static int ArySize = 5;
        // サイズを指定して配列を作る
        public FailSoftArray(int size = 5)
        {
            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;
        }
        public FailSoftArray FSAddition(FailSoftArray a)
        {
            FailSoftArray w = new FailSoftArray(ArySize);
            for (int i = 0; i < w.Length; i++)
            {
                w[i] = a[i] + this[i];
            }
            return w;
        }
        public void OutPutArray()
        {
            int x;
            for (int i = 0; i < this.Length; i++)
            {
                x = this[i];      //get
                if (!this.ErrFlag)
                    Console.Write(x + " ");
                else
                    Console.Write("fs[" + i + "] out-of-bounds");
            }
        }
        public static FailSoftArray operator +(FailSoftArray a, FailSoftArray b)
        {
            FailSoftArray w = new FailSoftArray(FailSoftArray.ArySize);
            for (int i=0; i< FailSoftArray.ArySize; i++)
            {
                w[i] = a[i] + b[i];
            }
            return w;
        }
    }
        
    class ImprovedFSDemo
    {
        public static void Main()
        {
            FailSoftArray[] fs = { new FailSoftArray(FailSoftArray.ArySize), 
                                    new FailSoftArray(FailSoftArray.ArySize),
                                    new FailSoftArray(FailSoftArray.ArySize)};
            int x;

            // エラーを表示
            Console.Write("\nFail with error reports.\n");
            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
                    if (!fs[j].ErrFlag)
                        Console.Write(x + " ");
                    else
                        Console.Write("fs[" + j + "][" + i + "] out-of-bounds");
                }
            }

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


 何となく、思っていた通りに出来てます。でも、独習C#第3版の内容から言えば、プロパティの説明があります。適用出来ますか?色のついた箇所が今回変えたところです。コードを単純化してみたと思います。ほんの趣旨と変わるかも。


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

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