参照型配列の初期化
参照型の配列も初期化できる。以下はClass1クラスの配列変数を初期化リストで初期化した例である。
1: using System;
2:
3: namespace ConsoleApplication75
4: {
5: class Class1
6: {
7: private int n;
8: public Class1( int param )
9: {
10: this.n = param;
11: }
12: static void Main(string[] args)
13: {
14: Class1 [] ar = new Class1 [] { new Class1(1), new Class1(2), new
Class1(3) };
15: for( int i=0; i<3; i++ )
16: {
17: Console.WriteLine( ar[i].n );
18: }
19: }
20: }
21: } |
|
参照型配列の初期化を行っているサンプル・プログラム6 |
配列の要素としてClass1のインスタンスを設定している。 |
これを実行すると以下のようになる。
|
サンプル・プログラム6の実行結果 |
配列作成時にClass1のコンストラクタに渡した値が順に表示される。
|
ここでポイントになるのは、14行目の初期化リストの中に、そのものズバリ、Class1クラスのインスタンスを作成するnewを書き込んでいることである。このような書き方も可能である。
配列のメソッド
配列変数は、一種のインスタンスである。これは、システムに標準で含まれるSystem.Arrayクラスから継承されたものであり、このクラスが公開するメソッドなどはすべて利用可能である。以下はそれを用いた例である。
1: using System;
2:
3: namespace ConsoleApplication76
4: {
5: class Class1
6: {
7: static void Main(string[] args)
8: {
9: int [] ar = { 0, 1, 2, 3, 4 };
10: for( int i=ar.GetLowerBound(0); i<=ar.GetUpperBound(0); i++ )
11: {
12: Console.WriteLine( ar[i] );
13: }
14: }
15: }
16: } |
|
配列のメソッドを使用したサンプル・プログラム7 |
配列はSystem.Arrayクラスを継承しているため、そのクラスのメソッドを配列に対して利用することができる。 |
これを実行すると以下のようになる。
|
サンプル・プログラム7の実行結果 |
配列の下限から上限までの各要素の値が順に表示される。
|
10行目に出てくるGetLowerBoundメソッドは、配列の添え字の下限を返す。GetUpperBoundメソッドは、添え字の上限の値を返す。それぞれ、引数の0というのは、最初の次元を意味する。1次元配列の場合は常にゼロだが、2次元以上になると、何次元目の上限、下限の値を得るか示すために、0から次元数マイナス1の値のいずれかを指定する。このように、配列はただ配列なのではなく、それ自身がインスタンスとしての側面も持つことを忘れてはならない。
配列をforeachでアクセス
すでに述べたとおり、配列はさまざまなメソッドなどを持っている。その中には、IEnumerableというインターフェイスの実装を含む。初心者はIEnumerableの意味を理解する必要はないが、それがもたらす効能は知っている価値がある。つまり、foreach文が使えるのである。以下に、それを使った例を示す。
1: using System;
2:
3: namespace ConsoleApplication77
4: {
5: class Class1
6: {
7: static void Main(string[] args)
8: {
9: int [] ar = { 0, 1, 2, 3, 4 };
10: foreach( int n in ar )
11: {
12: Console.WriteLine( n );
13: }
14: }
15: }
16: } |
|
配列に対してforeach文を使用したサンプル・プログラム8 |
配列はIEnumerableインターフェイスを実装しているためforeach文が使用できる。 |
これを実行すると以下のようになる。
|
サンプル・プログラム8の実行結果 |
foreach文により各要素が順に取り出され、表示される。
|
foreach文の効能により、10行目から13行目までのループをまわりながら、配列の要素が1つずつ変数nに代入される。これにより、配列の添え字の範囲を意識することなく、すべての要素にアクセスすることが可能になる。
しかし、foreach文でアクセスした場合、配列の内容を書き換えられないことに注意が必要である。つまり、この場合、変数nの値を書き換えても、それは変数nが変わるだけであって、配列の要素の値が変わることにはならないのである。
Insider.NET 記事ランキング
本日
月間