|
|
連載:[完全版]究極のC#プログラミング
Chapter2 ジェネリック
川俣 晶
2009/08/17 |
|
|
2.5 ジェネリックコレクションの使い方
ジェネリックコレクション(ジェネリックの機能を使用しているコレクションクラス)の使い方は、難しいものではない。
基本的な使い方だけに限れば、たった1つ、次の原則だけを覚えればよい。
- ジェネリックコレクションの型名の後に、扱うデータの型名を「<」と「>」で囲んで記述する(複数のデータ型を扱う場合にはカンマで区切る)
このようにして記述した文字列を、独立した型名と同じように書けばよい。つまり、文字列をListクラスに格納する場合は、
という文字列を型名のように使えばよい。「new ArrayList()」が有効であるのと同じように、「new List<string>()」は有効である。
Dictionaryクラスのように、キー(key)と値(value)の2つの型を用いるクラスの場合は、<>内で型を2つ指定する。キーが整数で値が文字列なら、
と記述する。あとは、従来のコレクションとほとんど扱いに差はない。次のリスト2.4はこれらのクラスの使用例である。
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 文字列を要素として扱うListクラス
List<string> list = new List<string>();
list.Add("Sample List");
Console.WriteLine(list[0]); // 出力:Sample List
// キーが整数で値が文字列の要素を扱うDictionaryクラス
Dictionary<int, string> dic = new Dictionary<int, string>();
dic[0] = "Sample Dictionary";
Console.WriteLine(dic[0]); // 出力:Sample Dictionary
}
}
|
|
リスト2.4 ListクラスとDictionaryクラスの使用例 |
もちろん、「<」と「>」で囲んで指定した型は、その型だけでなくその型を継承した型も受け入れる。インターフェースを指定した場合は、そのインターフェースを実装した型のインスタンスを受け入れる。
基底クラスの型のコレクションにそれを継承した型のインスタンスを格納した例と、インターフェースのコレクションにそれを実装したクラスのインスタンスを格納した例を、次ページのリスト2.5に示す。このあたりは、C#のほかの機能と同様であり、難しいことはないだろう。
using System;
using System.Collections.Generic;
// インターフェースの定義
public interface ISample
{
void SayISample();
}
// 抽象クラスの定義
public abstract class SampleBase
{
public abstract void SaySample();
}
// SampleBaseクラスを継承し、ISampleインターフェースを実装したクラス
public class Sample : SampleBase, ISample
{
public override void SaySample()
{
Console.WriteLine("Sample!");
}
public void SayISample()
{
Console.WriteLine("ISample!");
}
}
class Program
{
static void Main(string[] args)
{
// SampleBase型のコレクションにSampleオブジェクトを追加
List<SampleBase> list1 = new List<SampleBase>();
list1.Add(new Sample());
list1[0].SaySample(); // 出力:Sample!
// ISample型のコレクションにSampleオブジェクトを追加
List<ISample> list2 = new List<ISample>();
list2.Add(new Sample());
list2[0].SayISample(); // 出力:ISample!
}
}
|
|
リスト2.5 継承とインターフェースを使った例 |
Insider.NET 記事ランキング
本日
月間