連載
|
![]() |
|
|
|
独自のコレクション・クラスを列挙可能に
最後に、前回の最後で作成したLinkCollectionクラスを列挙可能にしてみましょう。
■IEnumerableインターフェイスの実装
まず、LinkCollectionクラスでは次のような作業が必要となります。
- IEnumerableインターフェイスの名前をクラスの宣言部分に追加
- GetEnumeratorメソッドを追加
LinkCollectionクラスのコードは次のようになります。今回追加したコードは太字で示しています。なお、コレクションの全要素数を取得するためのCountプロパティが未実装だったため、それも追加しています。
|
C#版
|
|
|
|
|
VB.NET版
|
|
|
|
| IEnumerableインターフェイスを実装したLinkCollectionクラス |
GetEnumeratorメソッドでは列挙用オブジェクトを作成して返します。列挙用オブジェクトのクラスの名前は「LinksEnumerator」としました。
LinksEnumeratorオブジェクト(=列挙用オブジェクト)は、LinkCollectionオブジェクトから要素を取り出す必要があるため、コンストラクタにより、現在のLinkCollectionオブジェクトの参照(thisやMe)を渡してやります。
■IEnumeraterインターフェイスを実装したクラスの作成
次に、IEnumeraterインターフェイスを実装した列挙用オブジェクトのクラスを記述します。内部データとなるフィールドとしては、現在のインデックス番号と、対象となるコレクション(LinkCollectionオブジェクト)への参照が必要となります。
|
C#版
|
|
|
|
|
VB.NET版
|
|
|
|
| IEnumeratorインターフェイスを実装した列挙用オブジェクトのクラス |
このクラスはLinkCollectionクラスと関連が深いため、LinkCollectionクラスの内部で「入れ子クラス」として定義される場合がありますが、ここでは分かりやすいようにLinkCollectionクラスとは別の独立したクラスとして記述しました。
ちなみに、Visual Studio .NETには、クラスの宣言部分でインターフェイス名を列挙しただけで、そのクラスで記述しなければならないメソッドのひな形を自動的に作成してくれる機能があるため非常に便利です。
以上でLinkCollectionクラスはforeach可能となりました。これでLinkCollectionクラスは、列挙のための(クラス・ライブラリの世界における)標準インターフェイスに準拠したことになります。
■
これだけでは、まだインターフェイスの有用性についてピンとこない方がいるかもしれませんので、インターフェイスを学ぶための参考となる記事をいくつか挙げておきます。
IEnumerableインターフェイスと並んで比較的よく利用しそうなインターフェイスとしては、配列などの並べ替えで使用するIComparerインターフェイスがあります。これについては「.NET TIPS:配列を独自の順序でソート(並べ替え)するには?」で解説されています。
また、データベース・アクセスのためのADO.NETでは、データ・プロバイダ(SQL ServerやOracleに実際にアクセスするクラス)に依存しないように、インターフェイス・ベースでADO.NETのクラス群を利用することができます。これについては、「連載:ADO.NET基礎講座 第2回」の「インターフェイス・ベースの記述」で触れています。
最後に
全7回にわたりオブジェクト指向プログラミングの基礎を解説してきたわけですが、おそらく本連載だけを読んでもC#やVB.NETでプログラミングができるようにはなりません。その代わり、C#入門やVB.NET入門などを併読して例外やデリゲートなどの言語特有の機能を学べば、C#やVB.NETで記述されたソース・コードは何となく読めるぐらいにはなっていると思います。
あとやるべきことは、人が書いたコードをたくさん読み、それを模倣しながら自分でコードを記述し、悩み、考えることです。とにかく自分でコードを書き始めないとオブジェクト指向プログラミング(やオブジェクト指向)の難しさも素晴らしさもなかなか理解できないと思います。これを機にオブジェクト指向プログラミングの世界に足を踏み入れてみてください。![]()
| INDEX | ||
| 連載 オブジェクト指向プログラミング超入門 | ||
| 最終回 オブジェクトをつなぐためのインターフェイス | ||
| 1.クラス・ライブラリで定義されているインターフェイス | ||
| 2.インターフェイスの定義と実装方法 | ||
| 3.foreach文の正体 | ||
| 4.独自のコレクション・クラスを列挙可能に | ||
| 「連載:オブジェクト指向プログラミング超入門 」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


