ジェネリックの使用方法

download.gif

サンプル コードのダウンロード (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)が表示されます。

Generics_default_01.jpg
図1

[String 型]ボタンをクリックすると、図2 のようにテキストボックスに取得した文字列(”Visual Basic 2005”)が表示されます。

Generics_default_02.jpg
図2

このように、ジェネリックを使用することで、同じロジックのクラスを複数定義する必要がありません。

また、ジェネリックには、 Dictionary、HashTable、List、Stack などのコレクションが提供されています。さらに、ジェネリックの特徴として、コンパイル時に型チェックも行われます。たとえば、下記(List コレクションを使用した例です。)のように記述した場合、3 行目の「intList.Add("A")」(太字部分)でコンパイル時エラーが発生します。これにより、実行時エラーを軽減させることができます。

Dim intList As New List(Of Integer)
intList.Add(1)
intList.Add("A")

リスト3