この記事は、
初心者のためのC#プログラミング本格入門90の続きです。前回は、配列とデータ構造について解説しました。今回は、配列と同様にアクセスできるオブジェクトを、定義する文法について解説します。
配列と同様に[]記号で、オブジェクトに格納した要素にアクセスするためには、新しい文法である
インデクサ―を使用します。インデクサ―は、
パラメーター付きプロパティとも呼ばれている文法です。パラメーター付きプロパティという表現はぴったりなので、そう考えてみればサンプルプログラムを一目見てわかると思います。
class SimpleList
{
//インデクサ―の例
public int this[ int index ]
{
get
{
return this.data[ index ];
}
}
}
thisキーワードとパラメーターに注意してみれば、プロパティを定義していると同じです。それ故に、パラメーター付きプロパティとも呼ばれているのです。パラメーターを定義している部分に注目して下さい。[]記号内にパラメーターを定義しています。thisキーワードとこの点に注目すれば、インデクサ―の記述が出来ます。
インデクサ―を定義したので、早速テストプログラムを修正しましょう。
class SimpleListTest : Test
{
//テストを完成させよう
public void OneElementAdd()
{
//テキトーに要素を追加して確認してみよう
base.Execute();
this.target = new SimpleList();
int value = 10;
this.target.Add( value );
//要素の数が増えているはず
if ( this.target.Count != 1 )
{
string message = "要素追加後の要素数が間違っています。" +
"追加処理が正しく行われていません。" +
"予想値:1 返却値: " +
this.target.Count;
base.Error( message );
}
//追加した要素は取り出せるはず
if ( this.target[ 0 ] != value )
{
string message = "正しく値が追加されていません。" +
"予想値:" + value +
" 結果:" + this.target[ 0 ];
base.Error( message );
}
}
}
プログラムを修正したら、テストを実行して下さい。テストが失敗してエラーが表示されます。
新しい要素を追加した筈なのに、何故0が返されるのでしょうか?前回の内容を思い出して考えてみて下さい。配列は番号で管理されていて、0番目から数えます。と言う事は、格納する時の番号の指定がおかしいと分かります。
こんな時はブレークポイントを設定し、実行中に止めて変数を見てみましょう。1番目に要素が追加されている事が確認できます。これを解決するには初期値を-1にするだけです。ただし、Countプロパティに注意せねばなりません。
class SimpleList
{
public SimpleList()
{
this.data = new int[ 10 ];
this.insertIndex = -1;
}
}
テストを実行すると、今度はCountプロパティの値でエラーになります。配列は要素を0番から管理しているので、個数は1を追加せねばならない事が原因です。
変数の意味と使用法をよく考える事が大事なのです。
class SimpleList
{
private int insertIndex; //挿入場所
public int Count
{
get { return this.insertIndex + 1; }
}
}
今度はテストをパスします。ひとまず安心ですね。
インデクサ―を使用すると、配列風のオブジェクトを定義できます。配列の様に、他のオブジェクトを格納、および管理をするオブジェクトの事を
データ構造もしくは
コンテナと呼ぶ場合があります。新しい用語を覚えるのは嫌かもしれませんが、
オブジェクトの性質が分かりやすいと言う理由でまだ使用するのでぜひ覚えておきましょう。この様なオブジェクトをプログラミングすると、プログラミングの深い理解につながります。
インデクサ―を使用すると、配列とほぼ同じだと感じたと思います。しかし、本当はまだ機能が足りません。次回はさらに配列の様なオブジェクトにしていきます。お楽しみに。
テーマ : プログラミング
ジャンル : コンピュータ