Type.IsSubclassOf(Type) Метод

Определение

Определяет, является ли текущий Type производным от указанного Type.

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

Параметры

c
Type

Тип для сравнения с текущим типом.

Возвращаемое значение

Boolean

Значение true, если текущий объект Type является производным от c; в противном случае — false. Этот метод также возвращает значение false, если параметр c и текущий объект Type равны.

Реализации

Атрибуты

Исключения

c имеет значение null.

Примеры

В следующем примере создается класс с именем Class1 и производный класс с именем DerivedC1 . Он вызывает IsSubclassOf метод, чтобы продемонстрировать, что DerivedC1 является подклассом 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 для определения любого из следующих элементов:

  • Является ли один класс производным от другого.

  • Является ли тип производным от ValueType . Однако IsValueType более эффективный способ определить, является ли тип типом значения.

  • Является ли тип производным от Enum . Однако IsEnum метод является более эффективным способом определения того, является ли тип перечислением.

  • Является ли тип делегатом, то есть является ли он производным от Delegate или MulticastDelegate .

IsSubclassOfМетод не может использоваться для определения того, является ли интерфейс производным от другого интерфейса или реализует ли класс интерфейс. Используйте IsAssignableFrom для этой цели метод, как показано в следующем примере.

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 Если у него нет ограничения класса.

Примечание

За исключением случаев использования с интерфейсами, IsSubclassOf является обратным IsAssignableFrom . То есть, если t1.IsSubclassOf(t2) имеет значение true , то t2.IsAssignableFrom(t1) также имеет значение true .

Этот метод может быть переопределен производным классом.

Применяется к

См. также раздел