ジェネリックの使用方法
サンプル コードのダウンロード (vbmigtips_Generics.msi, 485 KB)
※ このサンプルをインストールするには Visual Studio 2005 Beta 2 が必要です。
Visual Basic 2005 では、.NET Framework 2.0 のサポートによって様々な機能の追加に加え、実装方法やオブジェクトなどが変更されました。そこで今回は、Visual Basic 2005 から新たにサポートされたジェネリックについて説明します。
ジェネリックは、一定の型に依存せず、異なる型に対応したクラスです。ジェネリックを使用することで、汎用型のコレクションを簡単に作成できるほか、コードを再利用することが可能となります。
たとえば、Viusal Basic 6.0 や Visual Basic .NET 2003 までは、同じようなロジックでも、型が違えば型ごとにクラスを複数定義する必要がありました。しかし、Visual Basic 2005 のジェネリックを使用することで、型ごとにクラスを定義する必要がなくなりました。たとえば、Test プロパティ プロシージャを定義する場合、 Visula Basic 2005 では以下のように記述します。
Public Class TestData(Of ItemType) Private data As ItemType Public Property Test() As ItemType Get Return data End Get Set(ByVal Value As ItemType) data = Value End Set End Property End Class
リスト1
リスト1 のようにすることで、様々な型のデータを Test プロパティにセットしたり、取得したりすることができます。使用する型は、TestData クラスの生成時に指定します。Integer 型と String 型のデータをセットし、取得する場合は、下記のように呼び出します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intData As New TestData(Of Integer) intData.Test = 123456 TextBox1.Text = intData.Test End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim strData As New TestData(Of String) strData.Test = "Visual Basic 2005" TextBox1.Text = strData.Test End Sub
リスト2
リスト2 の「Private Sub Button1_Click( ... End Sub」では、Integer 型のデータを Test プロパティにセットし取得します。「Dim intData As New TestData(Of Integer)」で、Integer 型の TestData クラスを生成します。「intData.Test = 123456」で、Test プロパティを設定し、「TextBox1.Text = intData.Test」で Test プロパティを取得します。
リスト2 の「Private Sub Button2_Click( ... End Sub」では、String 型のデータを Test プロパティにセットし、取得します。「Dim strData As New TestData(Of String)」で String 型の TestData クラスを生成します。「strData.Test = "Visual Basic 2005"」で Test プロパティを設定し、「TextBox1.Text = 「strData.Test」で Test プロパティを取得します。
上記を実装し、[Integer 型]ボタンをクリックすると、図1 のようにテキストボックスに取得したデータ(123456)が表示されます。
図1
[String 型]ボタンをクリックすると、図2 のようにテキストボックスに取得した文字列(”Visual Basic 2005”)が表示されます。
図2
このように、ジェネリックを使用することで、同じロジックのクラスを複数定義する必要がありません。
また、ジェネリックには、 Dictionary、HashTable、List、Stack などのコレクションが提供されています。さらに、ジェネリックの特徴として、コンパイル時に型チェックも行われます。たとえば、下記(List コレクションを使用した例です。)のように記述した場合、3 行目の「intList.Add("A")」(太字部分)でコンパイル時エラーが発生します。これにより、実行時エラーを軽減させることができます。
Dim intList As New List(Of Integer) intList.Add(1) intList.Add("A")
リスト3