11.6. Exact Run-Time Types

The .NET generics implementation attempts to make generic types behave like any other type you might employ. This means that the marriage of a generic type and its type arguments should represent an actual type that can be evaluated like any other type. Consider the following example:

[VB code]
Public Class TestClass1(Of T)
End Class

Public Class TestClass2(Of T)
End Class

Public Class TestExactTypes

    Public Sub CompareTypes()
        Dim type1 As New TestClass1(Of Int32)
        Dim type2 As New TestClass1(Of String)
        Dim type3 As New TestClass2(Of Int32)

        CompareTypes(type1)
        CompareTypes(type2)
        CompareTypes(type3)
    End Sub

    Public Sub CompareTypes(ByVal aType As Object)
        If (TypeOf (aType) Is TestClass1(Of Int32)) Then
            Console.Out.WriteLine("Instance of TestClass1(Of Int32)")
        ElseIf (TypeOf (aType) Is TestClass1(Of String)) Then
            Console.Out.WriteLine("Instance of TestClass1(Of String)")
        ElseIf (TypeOf (aType) Is TestClass1(Of Double)) Then
            Console.Out.WriteLine("Instance of TestClass1(Of Double)")
        ElseIf (TypeOf (aType) Is TestClass2(Of Int32)) Then
            Console.Out.WriteLine("Instance of TestClass2(Of Int32)")
        End If
    End Sub
End Class
[C# code]
public class TestClass1<T> { }

public class TestClass2<T> { }

public class TestExactTypes {
    public void CompareTypes() {
        TestClass1<int> type1 = new TestClass1<int>();
        TestClass1<string> type2 = new TestClass1<string>();
        TestClass2<int> type3 = new TestClass2<int>();

        CompareTypes(type1);
        CompareTypes(type2);
        CompareTypes(type3);
    }

Get Professional .NET 2.0 Generics now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.