特集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ジャパン)
- VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ - 逆引きリファレンス:コア編 (2010/3/12)
jQueryのキモともいえる$()関数を始め、jQueryオブジェクトの中核となるメソッドについてまとめた、すぐに役立つ12本を一挙公開 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/3/11)
− LINQ文で動的にWhere句を組み立てるには?
− GridViewのフッタ行に合計値/平均値を表示するには?
− コレクションをプロパティ値によりグループ化するには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







