Type.IsSubclassOf(Type) メソッド

定義

現在の Type が、指定した Type から派生しているかどうかを判断します。Determines whether the current Type derives from the specified Type.

public:
 virtual bool IsSubclassOf(Type ^ c);
[System.Runtime.InteropServices.ComVisible(true)]
public virtual bool IsSubclassOf (Type c);
abstract member IsSubclassOf : Type -> bool
override this.IsSubclassOf : Type -> bool
Public Overridable Function IsSubclassOf (c As Type) As Boolean

パラメーター

c
Type

現在の型と比較する型。The type to compare with the current type.

戻り値

現在の Typec から派生している場合は true。それ以外の場合は falsetrue if the current Type derives from c; otherwise, false. false と現在の c とが等価の場合も、このメソッドは Type を返します。This method also returns false if c and the current Type are equal.

実装

属性

例外

cnullです。c is null.

次の例では、 Class1という名前のクラスとという名前DerivedC1の派生クラスを作成します。The following example creates a class named Class1 and a derived class named DerivedC1. これは、 IsSubclassOfメソッドを呼び出してDerivedC1 、がのClass1サブクラスであることを示します。It calls the IsSubclassOf method to show that DerivedC1 is a subclass of Class1.

using System;

public class Class1 { }
public class DerivedC1 : Class1 { }

class IsSubclassTest
{
   public static void Main()
   {
      Console.WriteLine("DerivedC1 subclass of Class1: {0}",
                         typeof(DerivedC1).IsSubclassOf(typeof(Class1)));
   }
}
// The example displays the following output:
//        DerivedC1 subclass of Class1: True
Public Class Class1
End Class

Public Class DerivedC1 : Inherits Class1
End Class

Public Module Example
   Public Sub Main()
      Console.WriteLine("DerivedC1 subclass of Class1: {0}",
                         GetType(DerivedC1).IsSubClassOf(GetType(Class1)))
   End Sub
End Module
' The example displays the following output:
'       DerivedC1 subclass of Class1: True

注釈

IsSubclassOfメソッドを呼び出して、次のいずれかを決定できます。You can call the IsSubclassOf method to determine any of the following:

  • あるクラスが別のクラスから派生しているかどうか。Whether one class derives from another.

  • 型がからValueType派生しているかどうか。Whether a type derives from ValueType. IsValueTypeただし、は、型が値型であるかどうかを判断するより効率的な方法です。However, the IsValueType is a more efficient way to determine whether a type is a value type.

  • 型がからEnum派生しているかどうか。Whether a type derives from Enum. ただし、メソッドは、型が列挙型であるかどうかを判断するより効率的な方法です。 IsEnumHowever, the IsEnum method is a more efficient way to determine whether a type is an enumeration.

  • 型がデリゲートであるかどうか、つまり、型がまたはDelegate MulticastDelegateのどちらから派生するかを示します。Whether a type is a delegate, that is, whether it derives from either Delegate or MulticastDelegate.

メソッドIsSubclassOfを使用して、インターフェイスが別のインターフェイスから派生しているかどうか、またはクラスがインターフェイスを実装しているかどうかを判断することはできません。The IsSubclassOf method cannot be used to determine whether an interface derives from another interface, or whether a class implements an interface. 次の例に示すように、この目的にはメソッドを使用します。IsAssignableFromUse the IsAssignableFrom method for that purpose, as the following example shows.

using System;

public interface IInterface
{
   void Display();
}

public class Implementation : IInterface
{
   public void Display()
   {
      Console.WriteLine("The implementation...");
   }
}

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Implementation is a subclass of IInterface:   {0}",
                        typeof(Implementation).IsSubclassOf(typeof(IInterface)));
      Console.WriteLine("IInterface is assignable from Implementation: {0}",
                        typeof(IInterface).IsAssignableFrom(typeof(Implementation)));
   }
}
// The example displays the following output:
//       Implementation is a subclass of IInterface:   False
//       IInterface is assignable from Implementation: True
Public Interface IInterface
   Sub Display()
End Interface

Public Class Implementation : Implements IInterface
   Public Sub Display() _
      Implements IInterface.Display

      Console.WriteLine("The implementation...")
   End Sub
End Class

Module Example
   Public Sub Main()
      Console.WriteLine("Implementation is a subclass of IInterface:   {0}",
                        GetType(Implementation).IsSubclassOf(GetType(IInterface)))
      Console.WriteLine("IInterface is assignable from Implementation: {0}",
                        GetType(IInterface).IsAssignableFrom(GetType(Implementation)))
   End Sub
End Module
' The example displays the following output:
'       Implementation is a subclass of IInterface:   False
'       IInterface is assignable from Implementation: True

現在Typeのがジェネリック型またはジェネリックメソッドの定義内の型パラメーターを表している場合は、クラス制約から派生System.Objectします。クラス制約がない場合は、から派生します。If the current Type represents a type parameter in the definition of a generic type or generic method, it derives from its class constraint or from System.Object if it has no class constraint.

注意

インターフェイスで使用する場合をIsSubclassOf除き、はのIsAssignableFrom逆です。Except when used with interfaces, IsSubclassOf is the converse of IsAssignableFrom. つまりt1.IsSubclassOf(t2) 、がtrue trueの場合は、もになります。 t2.IsAssignableFrom(t1)That is, if t1.IsSubclassOf(t2) is true, then t2.IsAssignableFrom(t1) is also true.

このメソッドは、派生クラスによってオーバーライドできます。This method can be overridden by a derived class.

適用対象

こちらもご覧ください