using System;
namespace Chapter01All
{
// 改良されたフェイルソフトな配列
// インデクサを追加して、フェイルソフトな配列を改良する
class FailSoftArray
{
int[] a; // 配列への参照
public int Length; // 変数Lengthはpublic
public static int ArySize = 5;
// サイズを指定して配列を作る
public FailSoftArray(int size )
{
a = new int[size];
Length = size;
}
// FailSoftArrayオブジェクトのためのインデクサ
public int this[int index]
{ //←FailSoftArrayに対するインデクサ
// getアクセサ
get
{
return a[index];
}
// setアクセサ
set
{
a[index] = value;
}
}
// インデックスが配列の上限・下限の範囲内なら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 < Length; i++)
{
x = this[i]; //get
Console.Write(" " + x);
}
Console.Write("||");
}
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;
}
public void SetInitValue()
{
for(int i=0; i<Length; i++)
{
a[i] = 10 * i;
}
}
}
class ImprovedFSDemo
{
public static void Main()
{
Console.WriteLine("演算子オーバーロード、インデクサ、プロパティの例");
FailSoftArray[] fs = new FailSoftArray[3];
for (int i = 0; i < 3; i++)
fs[i] = new FailSoftArray(FailSoftArray.ArySize);
/*
FailSoftArray[] fs = { new FailSoftArray(FailSoftArray.ArySize),
new FailSoftArray(FailSoftArray.ArySize),
new FailSoftArray(FailSoftArray.ArySize)};
*/
for (int i = 0; i < 3; i++)
fs[i].SetInitValue();
//*******************************************************************************
//fs[2] = fs[0].FSAddition(fs[1]);
fs[2] = fs[0] + fs[1];
//*******************************************************************************
for(int i=0; i<fs.Length; i++)
fs[i].OutPutArray();
Console.WriteLine();
}
}
}
今回苦労したのが、FailSoftArrayオブジェクト配列の取り方です。ピンクの文字の部分。前はグリーンの文字のように初期化したやり方をしてました。配列の大きさの範囲に入っているか?のチェックは外しました。プロパティの例は以降に出てきます。