型があるクラスの派生クラスであるかを調べる

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。
TypeクラスのIsSubclassOf()メソッドを使うことで、型があるクラスの派生クラスであるかどうかを判定できる。 ただし、このメソッドでは同じクラスを表す場合はFalseを返されるので、同じクラスを表すかどうかを判定する場合は、is演算子(C#)やIs演算子(VB.NET)を使って判定する必要がある。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
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
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
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