連載:[完全版]究極のC#プログラミングChapter2 ジェネリック川俣 晶2009/08/17 |
|
|
2.8 ジェネリックなクラスを自作する
ジェネリックはコレクションには便利だが、一般のクラスやメソッドなどで使うことはあまりない。任意の型を受け入れるという、途方もなく強力なパワーを持ったクラスを作らなければならない機会はあまり多くはない。それだけのパワーを持ったクラスを設計、実装することは一筋縄ではいかないからだ。
しかし、技術的に見て、定義にジェネリックを使うことは簡単である。ここで、ジェネリックなクラスを自作する例、リスト2.11を見てみよう。ここでは、任意の型の変数を内部に持つだけのクラスを作成している。
| |
リスト2.11 自作ジェネリッククラス |
手順は2つしかない。
第1の手順として、定義するクラスの名前の後ろに「<」と「>」で囲んで「型パラメータ」の名前を書き込む。ここに書き込む名前は実際に存在しない型の名前でよい。使用されるときに、この名前は実際に指定された型に置き換えられるからである。ちなみに、ここでは「T」または「Tで始まる名前」(TValueなど)を使うのが一般的である。
第2の手順として、宣言された型パラメータの名前を、“あたかも実在する型の名前であるかのように”使ってクラスを実装する。
たとえば、「public T Value;」という変数宣言は、あたかもTという型があるかのように記述しているが、実際に使われる場合にはTがintやstringに置き換えられるわけである。
INDEX | ||
[完全版]究極のC#プログラミング | ||
Chapter2 ジェネリック | 1.2.1 ジェネリックとは何か? | |
2.2.2 新しいコレクションの紹介 | ||
3.2.3 新しいコレクションクラス―LinkedListクラス | ||
4.2.4 新しいコレクションクラス―SortedDictionaryクラス | ||
5.2.5 ジェネリックコレクションの使い方 | ||
6.2.6 ジェネリックメソッドと型推論 | ||
7.2.7 HashtableクラスとDictionaryクラスの非互換性 | ||
8.2.8 ジェネリックなクラスを自作する | ||
9.2.9 制約の付いたジェネリックなクラス/C++のtemplate機能との相違/練習問題 | ||
「[完全版]究極のC#プログラミング」 |
Insider.NET フォーラム 新着記事
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|