特集C#&VBジェネリック超入門(前編)ジェネリック・クラスで変わる
デジタルアドバンテージ 遠藤 孝信 |
![]() |
|
|
|
ジェネリック・クラスの記述方法
ここで簡単に、ジェネリック・クラスの記述方法についても見ておきましょう。
以下は、Listジェネリック・クラスの仕様をまねたMyListジェネリック・クラスの実装例です。取りあえずAddメソッドとインデクサだけを実装しています。
|
||
| ジェネリックを使用したMyListクラスの実装 | ||
| 格納する要素が1000を超えた場合にはエラーとなる。またインデクサでのインデックス番号の範囲チェックも行っていない。 |
このように、ジェネリック・クラスの記述では、型パラメータを「T」とした場合、Tというクラスがあるかのようにフィールドやメソッドを記述していきます。
これまでに「T」の部分が具体的なクラス名になっているようなクラスを記述されたことがあるかもしれません。例えば「T」の部分がすべて「Employee」になっているようなEmployeeクラス専用のコレクション・クラスなどです。
ジェネリックの導入により、その「T」部分が自動的に置き換えられる、汎用的なコレクション・クラスが記述可能となったわけです。
なお、型パラメータである「T」は単なるパラメータの名前であり、メソッドのパラメータと同じで、好きな名前を付けることができます。ただし名前付けのガイドラインは用意されています*。型パラメータが1つだけの場合は「T」がよく用いられます。
| *「型パラメータの名前付けのガイドライン」を参照してください。 |
念のために、上記のMyList<T>クラスを、文字列型とDateTime構造体で使用したサンプル・プログラムを次に示しておきます。
|
||
| MyListジェネリック・クラスを使用したサンプル・プログラム |
【コラム】 型パラメータの制約
ジェネリック・クラスを記述するとき、型パラメータに指定される型を制限する必要が出てくる場合があります。
例えば、型パラメータの型(以下、Tと省略)のオブジェクトのメソッドを呼び出すようなコードを記述する場合、Tには必ずそのメソッドが実装されていなければ困ります。あるいは、Tのインスタンスを生成する(new T()する)ようなコードを記述する場合には、Tにパブリックな(パラメータを持たない)コンストラクタがなければ困ります。
ジェネリック・クラスでこういった制約(constraints)を記述するには、C#ではwhereキーワード、VBでは「Of T」の後にAsキーワードを使います。
以下に、記述可能な制約のパターンの一覧を実際のコードで示します(このコードはコンパイル可能です)。
|
||
| 記述可能な制約のパターンの一覧 |
なおここでは説明は割愛しますが、1つの型パラメータに対して複数の制約を指定可能です。
| INDEX | ||
| [特集] | ||
| C#&VBジェネリック超入門(前編) | ||
| ジェネリック・クラスで変わるC#とVBのコレクション | ||
| 1.従来のコレクションの代表:ArrayListクラス | ||
| 2.ジェネリックを使った新しいコレクション:Listジェネリック・クラス | ||
| 3.ジェネリック・クラスの記述方法 | ||
| 4.Hashtableクラスを置き換えるDictionaryジェネリック・クラス | ||
| C#&VBジェネリック超入門(後編) | ||
| ジェネリックなメソッドやデリゲートがもたらす新スタイル | ||
| 1.ジェネリック・メソッド − ArrayクラスのIndexOfメソッド | ||
| 2.ジェネリック・デリゲート − Action<T>デリゲート | ||
| 3.Action<T>デリゲートを使用するList<T>クラスのForEachメソッド | ||
| 4.Comparison<T>デリゲートを使用するList<T>クラスのSortメソッド | ||
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |







