Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês
Esta documentação foi arquivada e não está sendo atualizada.

Propriedade Type.IsGenericType

Obtém um valor que indica se o tipo corrente é um tipo genérico.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)

public virtual bool IsGenericType { get; }

Valor de propriedade

Tipo: System.Boolean
true Se o tipo corrente é um tipo genérico; caso contrário, false.

Use o IsGenericType propriedade para determinar se um Type objeto representa um tipo genérico. Use o ContainsGenericParameters propriedade para determinar se um Type objeto representa um tipo construído em aberto ou um tipo construído fechado.

ObservaçãoObservação:

O IsGenericType propriedade para retornar false Se não for o tipo de imediato genérico. Por exemplo, uma matriz cujos elementos são do tipo A<int> (A(Of Integer) no Visual Basic) é não-se um tipo genérico.

A tabela a seguir resume as condições invariável para termos comuns usados em reflexão genérico.

Termo

Constante

definição de tipo genérico

The IsGenericTypeDefinition propriedade é true.

Define um tipo genérico.Um tipo construído é criado chamando o MakeGenericType método em um Type objeto que representa uma definição de tipo genérico e especificando uma matriz de argumentos de tipo.

MakeGenericType pode ser chamado apenas em definições de tipo genérico.

Qualquer definição de tipo genérico é um tipo genérico (a IsGenericType propriedade é true), mas não vale o inverso.

tipo genérico

The IsGenericType propriedade é true.

Pode ser uma definição de tipo genérico, um tipo construído em aberto ou um tipo fechado construído.

Observe que uma matriz digite cujo tipo de elemento é genérico próprio não é um tipo genérico.O mesmo é válido de um Type objeto que representa um ponteiro para um tipo genérico.

em em aberto tipo construído

The ContainsGenericParameters propriedade é true.

Os exemplos são um tipo genérico tem não atribuído parâmetros de tipo, um tipo que está aninhado em uma definição de tipo genérico ou em um tipo construído em aberto ou um tipo genérico que tem um argumento de tipo para o qual o ContainsGenericParameters propriedade é true.

Não é possível criar uma instância de um tipo em aberto construído.

Observe que não abertos tipos construídos genéricos.Por exemplo, uma matriz cujo tipo de elemento é uma definição de tipo genérico não é genérica e um ponteiro para um tipo construído em aberto não é genérico.

tipo construído fechado

The ContainsGenericParameters propriedade é false.

Quando inspeção repetidamente, o tipo não tem não atribuído do tipo genéricos parâmetros.

parâmetro de tipo genérico

The IsGenericParameter propriedade é true.

The ContainsGenericParameters propriedade é true.

Em uma definição de tipo genérico, um espaço reservado para um tipo que será atribuído mais tarde.

argumento de tipo genérico

Pode ser qualquer tipo, incluindo um parâmetro de tipo genérico.

Argumentos de tipo são especificados sistema autônomo uma matriz de Type objetos passados para o MakeGenericType método ao criar um tipo genérico construído. Se digitar instâncias de resultante devem ser criados, a ContainsGenericParameters propriedade deve ser false para todos os argumentos de tipo.

O exemplo de código e a tabela a seguir ilustram alguns desses termos e constantes.The Derived classe é de particular interesse porque seu tipo básico é um tipo construído com uma mistura de tipos e parâmetros de tipo em sua lista de argumentos de tipo.

public class Base<T,U> {}
public class Derived<V> : Base<String,V> 
{
    public G<Derived<V>> F;
    public class Nested {}
}
public class G<T> {}

A tabela a seguir mostra exemplos que usam e criar as classes Base, Derived, e G. Quando o código C++ e translation from VPE for Csharp é a mesma, apenas uma entrada é mostrada.

Exemplo

Constantes

Derived(Of V)

Derived<V>

Para este tipo:

IsGenericType é true.

IsGenericTypeDefinition é true.

ContainsGenericParameters é true.

Base(Of String, V)

Base<String,V>

Base<String^,V>

Para este tipo:

IsGenericType é true.

IsGenericTypeDefinition é false.

ContainsGenericParameters é true.

Dim d() As Derived(Of Integer)

Derived<int>[] d;

array<Derived<int>^>^ d;

Para o tipo de variável d:

IsGenericType é false porque d é uma matriz.

IsGenericTypeDefinition é false.

ContainsGenericParameters é false.

T, U, e V (em qualquer lugar que eles aparecem)

IsGenericParameter é true.

IsGenericType é false porque não há nenhuma forma para restringir um parâmetro de tipo para tipos genéricos.

IsGenericTypeDefinition é false.

ContainsGenericParameters é true porque T, U, e V são parâmetros de tipo genérico. Isso não significa nada sobre argumentos de tipo são atribuídos a eles posteriormente.

O tipo de campo F

IsGenericType é true.

IsGenericTypeDefinition é false porque um tipo foi atribuído ao parâmetro de tipo G. Observe que isso é equivalente a ter chamado a MakeGenericType método.

ContainsGenericParameters é true porque o tipo de campo F tem um argumento de tipo é um tipo em aberto construído. O tipo construído é em aberto como seu argumento de tipo (ou seja, Base) é uma definição de tipo genérico. Isso ilustra a natureza recursiva do IsGenericType propriedade.

A classe aninhada Nested

IsGenericType é true, mesmo que o Nested classe não tem tipo genérico parâmetros das suas próprias, porque ele está aninhado em um tipo genérico.

IsGenericTypeDefinition é true. Ou seja, você pode chamar o MakeGenericType método e o parâmetro de tipo do tipo delimitador, fonte Derived.

ContainsGenericParameters é true como o delimitador digitar, Derived, possui parâmetros de tipo genérico. Isso ilustra a natureza recursiva do ContainsGenericParameters propriedade.

O exemplo de código a seguir exibe o valor do IsGenericType, IsGenericTypeDefinition, IsGenericParameter, e ContainsGenericParameters Propriedades de tipos descritos na seção comentários. Para obter explicações sobre os valores de propriedade, consulte a tabela que acompanham comentários.

using System;
using System.Reflection;

publicclass Base<T, U> {}

publicclass Derived<V> : Base<string, V>
{
    public G<Derived <V>> F;

    publicclass Nested {}
}

publicclass G<T> {}

class Example
{
    publicstaticvoid Main()
    {
        // Get the generic type definition for Derived, and the base// type for Derived.//
        Type tDerived = typeof(Derived<>);
        Type tDerivedBase = tDerived.BaseType;

        // Declare an array of Derived<int>, and get its type.//
        Derived<int>[] d = new Derived<int>[0];
        Type tDerivedArray = d.GetType();

        // Get a generic type parameter, the type of a field, and a// type that is nested in Derived. Notice that in order to// get the nested type it is necessary to either (1) specify// the generic type definition Derived<>, as shown here,// or (2) specify a type parameter for Derived.//
        Type tT = typeof(Base<,>).GetGenericArguments()[0];
        Type tF = tDerived.GetField("F").FieldType;
        Type tNested = typeof(Derived<>.Nested);

        DisplayGenericType(tDerived, "Derived<V>");
        DisplayGenericType(tDerivedBase, "Base type of Derived<V>");
        DisplayGenericType(tDerivedArray, "Array of Derived<int>");
        DisplayGenericType(tT, "Type parameter T from Base<T>");
        DisplayGenericType(tF, "Field type, G<Derived<V>>");
        DisplayGenericType(tNested, "Nested type in Derived<V>");
    }

    publicstaticvoid DisplayGenericType(Type t, string caption)
    {
        Console.WriteLine("\n{0}", caption);
        Console.WriteLine("    Type: {0}", t);

        Console.WriteLine("\t            IsGenericType: {0}", 
            t.IsGenericType);
        Console.WriteLine("\t  IsGenericTypeDefinition: {0}", 
            t.IsGenericTypeDefinition);
        Console.WriteLine("\tContainsGenericParameters: {0}", 
            t.ContainsGenericParameters);
        Console.WriteLine("\t       IsGenericParameter: {0}", 
            t.IsGenericParameter);
    }
}

/* This code example produces the following output:

Derived<V>
    Type: Derived`1[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False

Base type of Derived<V>
    Type: Base`2[System.String,V]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Array of Derived<int>
    Type: Derived`1[System.Int32][]
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: False
               IsGenericParameter: False

Type parameter T from Base<T>
    Type: T
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: True

Field type, G<Derived<V>>
    Type: G`1[Derived`1[V]]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Nested type in Derived<V>
    Type: Derived`1+Nested[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False
 */

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

o.NET Framework e.NET Compact Framework não oferecem suporte a todas as versões de cada plataforma. Para obter uma lista de versões suportadas, consulte Requisitos de sistema do .NET framework.

.NET Framework

Compatível com: 3.5, 3.0, 2.0

.NET Compact Framework

Compatível com: 3.5, 2.0

XNA Framework

Compatível com: , 1.0
Mostrar: