TypeクラスのIsSubclassOf()メソッドを使うことで、型があるクラスの派生クラスであるかどうかを判定できる。 ただし、このメソッドでは同じクラスを表す場合はFalseを返されるので、同じクラスを表すかどうかを判定する場合は、is演算子(C#)やIs演算子(VB.NET)を使って判定する必要がある。

Sponsored Link

Public Class ClassA

End Class

Public Class ClassB

    Inherits ClassA

End Class

Public Class ClassC

    Inherits ClassB

End Class

Public Class Test

    Public Shared Sub Main()

        Dim typeOfClassA As Type = GetType(ClassA)
        Dim typeOfClassB As Type = GetType(ClassB)
        Dim typeOfClassC As Type = GetType(ClassC)

        If typeOfClassA.IsSubclassOf(typeOfClassB) Then Console.WriteLine("{0}は{1}の派生クラスです。", typeOfClassA.Name, typeOfClassB.Name)
        If typeOfClassB.IsSubclassOf(typeOfClassA) Then Console.WriteLine("{0}は{1}の派生クラスです。", typeOfClassB.Name, typeOfClassA.Name)

        If typeOfClassC.IsSubclassOf(typeOfClassA) Then Console.WriteLine("{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassA.Name)
        If typeOfClassC.IsSubclassOf(typeOfClassB) Then Console.WriteLine("{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassB.Name)
        If typeOfClassC.IsSubclassOf(typeOfClassC) Then Console.WriteLine("{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassC.Name)

    End Sub

End Class
public class ClassA {}

public class ClassB : ClassA {}

public class ClassC : ClassB {}

public class Test
{
    public static void Main()
    {
        Type typeOfClassA = typeof( ClassA );
        Type typeOfClassB = typeof( ClassB );
        Type typeOfClassC = typeof( ClassC );

        if ( typeOfClassA.IsSubclassOf( typeOfClassB ) ) Console.WriteLine( "{0}は{1}の派生クラスです。", typeOfClassA.Name, typeOfClassB.Name );
        if ( typeOfClassB.IsSubclassOf( typeOfClassA ) ) Console.WriteLine( "{0}は{1}の派生クラスです。", typeOfClassB.Name, typeOfClassA.Name );

        if ( typeOfClassC.IsSubclassOf( typeOfClassA ) ) Console.WriteLine( "{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassA.Name );
        if ( typeOfClassC.IsSubclassOf( typeOfClassB ) ) Console.WriteLine( "{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassB.Name );
        if ( typeOfClassC.IsSubclassOf( typeOfClassC ) ) Console.WriteLine( "{0}は{1}の派生クラスです。", typeOfClassC.Name, typeOfClassC.Name );
    }
}
実行結果
ClassBはClassAの派生クラスです。
ClassCはClassAの派生クラスです。
ClassCはClassBの派生クラスです。
Press any key to continue