Type.IsSubclassOf(Type) Método

Definição

Determina se a corrente Type deriva do especificado 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

Parâmetros

c
Type

O tipo a comparar com o tipo atual.

Devoluções

true se a corrente Type deriva de c; caso contrário, false. Este método também retorna false se c e as correntes Type forem iguais.

Implementações

Atributos

Exceções

Exemplos

O exemplo seguinte cria uma classe nomeada Class1 e uma classe derivada chamada DerivedC1. Chama ao IsSubclassOf método para mostrar que DerivedC1 é uma subclasse de 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
type Class1() = class end
type DerivedC1() = inherit Class1()

printfn $"DerivedC1 subclass of Class1: {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

Observações

Pode chamar o IsSubclassOf método para determinar qualquer um dos seguintes:

  • Se uma classe deriva de outra.

  • Se um tipo deriva de ValueType. No entanto, é IsValueType uma forma mais eficiente de determinar se um tipo é um tipo de valor.

  • Se um tipo deriva de Enum. No entanto, o IsEnum método é uma forma mais eficiente de determinar se um tipo é uma enumeração.

  • Se um tipo é um delegado, isto é, se deriva de ou DelegateMulticastDelegate.

O IsSubclassOf método não pode ser usado para determinar se uma interface deriva de outra interface, ou se uma classe implementa uma interface. Use o IsAssignableFrom método para esse fim, como mostra o exemplo seguinte.

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
type IInterface =
    abstract Display : unit -> unit

type Implementation() =
    interface IInterface with
        member _.Display() = printfn "The implementation..."

printfn $"Implementation is a subclass of IInterface:   {typeof<Implementation>.IsSubclassOf typeof<IInterface>}"
printfn $"IInterface is assignable from Implementation: {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

Se a corrente Type representa um parâmetro de tipo na definição de um tipo genérico ou método genérico, deriva da sua restrição de classe ou de System.Object se não tiver restrição de classe.

Note

Exceto quando usado com interfaces, IsSubclassOf é o inverso de IsAssignableFrom. Ou seja, se t1.IsSubclassOf(t2) é true, então t2.IsAssignableFrom(t1) também trueé .

Este método pode ser anulado por uma classe derivada.

Aplica-se a

Ver também