Partilhar via


Visão geral das classes genéricas no .NET Framework

Este tópico fornece uma visão geral das classes genéricas no .NET Framework e um resumo dos tipos ou métodos genéricos.Ele também define a terminologia usada para discutir as classes genéricas.

Definindo e usando classes genéricas

As classes, estruturas, interfaces e os métodos genéricos possuem espaços reservados (parâmetros de tipo) para um ou mais dos tipos que eles armazenam ou usam.Uma classe de coleção genérica pode usar um parâmetro de tipo como um espaço reservado para o tipo de objetos que ela armazena; os parâmetros de tipo aparecem como os tipos de seus campos e os tipos de parâmetro de seus métodos.Um método genérico pode usar seu parâmetro de tipo como o tipo de seu valor de retorno ou como o tipo de um dos seus parâmetros formais.O código a seguir ilustra uma definição de classe genérica simples.

Public Class Generic(Of T)
    Public Field As T
End Class
public class Generic<T> 
{
    public T Field;
}
generic<typename T> public ref class Generic 
{
public:
    T Field;
};

Quando você cria uma instância de uma classe genérica, você especifica os tipos reais para substituir os parâmetros de tipo.Isso estabelece uma nova classe genérica, conhecida como uma classe genérica construída, com seus tipos escolhidos substituídos em todos os lugares em que aparecem os parâmetros de tipo.O resultado é uma classe de tipos seguros que seja adequada para sua escolha de tipos, como mostra o código a seguir.

Dim g As New Generic(Of String)
g.Field = "A string"
Generic<string> g = new Generic<string>();
g.Field = "A string";
Generic<String^>^ g = gcnew Generic<String^>();
g->Field = "A string";

Terminologia das Classes Genéricas

Os seguintes termos são usados para discutir as classes e métodos genéricos no .NET Framework:

  • Uma definição de tipo genérico é uma classe, estrutura ou declaração de interface que funciona como um modelo com espaços reservados para os tipos que ele pode conter ou usar.Por exemplo, a Dictionary<TKey, TValue> classe pode conter dois tipos: chaves e valores.Como é apenas um modelo, você não pode criar instâncias de uma classe, estrutura ou interface que seja uma definição de tipo genérico.

  • Parâmetros de tipo genérico ,ou parâmetros de tipo , são os espaços reservados na definição de um tipo ou método genérico.O tipo genérico Dictionary<TKey, TValue> possui dois parâmetro de tipos, TKey e TValue,que representam os tipos de suas chaves e valores.

  • Um tipo genérico construído , ou tipo construído , é o resultado da especificação de tipos para os parâmetros de tipo genéricos de uma definição de tipo genérico.

  • Um argumento de tipo genérico é qualquer tipo que seja substituído por um parâmetro de tipo genérico.

  • O termo geral tipo genérico inclui tanto definições de tipos construídos quanto genéricos.

  • Restrições são colocados em parâmetros de tipo genérico de limites.Por exemplo, você pode limitar um parâmetro de tipo para tipos que implementem a interface genérica IComparer<T> , para garantir que instâncias do tipo possam ser classificadas.Você também pode restringir parâmetros de tipo para tipos que têm uma determinada classe base, que têm um construtor padrão, ou que são tipos de referência ou tipos de valor.Os usuários do tipo genérico não podem substituir argumentos de tipo que não satisfaçam as restrições.

  • A definição de método genérica é um método com duas listas de parâmetros: uma lista de parâmetros de tipo genérico e uma lista de parâmetros formais.Parâmetros de tipo podem aparecer como o tipo de retorno ou como os tipos dos parâmetros formais, como mostra de código a seguir.

    Function Generic(Of T)(ByVal arg As T) As T
        Dim temp As T = arg
        ...
    End Function
    
    T Generic<T>(T arg) { T temp = arg; ...}
    
    generic<typename T> T Generic(T arg) { T temp = arg; ...};
    

    Métodos genéricos podem aparecer em tipos genéricos ou não genéricos.É importante observar que um método é genérico não apenas porque ele pertence a um tipo genérico, ou até mesmo porque tem parâmetros formais cujos tipos são os parâmetros genéricos do tipo delimitador.Um método é genérico somente se ele tiver sua própria lista de parâmetros de tipo.No código a seguir, somente o método G é genérico.

    Class A
        Function G(Of T)(ByVal arg As T) As T
            ...
        End Function
    End Class
    Class Generic(Of T)
        Function M(ByVal arg As T) As T
            ...
        End Function
    End Class
    
    class A 
    {
        T G<T>(T arg) {...}
    }
    class Generic<T> 
    {
        T M(T arg) {...}
    }
    
    ref class A 
    {
        generic<T> T G(T arg) {...};
    };
    generic<typename T> ref class Generic 
    {
        T M(T arg) {...};
    };
    

Visual C++, C# e Visual Basic, todos oferecem suporte completo para a definição e consumo de classes e métodos genéricos.Para obter mais informações, consulte Tipos genéricos no Visual Basic, Introdução ao Generics (guia de programação C#) e Overview of genéricos in Visual C++.

Tipos aninhados e classes genéricas

Um tipo que está aninhado em um tipo genérico pode depender dos parâmetros de tipo do tipo genérico delimitador.O Common Language Runtime considera tipos aninhados como genéricos, mesmo se eles ainda não tiverem parâmetros de tipo genéricos próprios.Quando você cria uma instância de um tipo aninhado, você deve especificar argumentos de tipo para todos os delimitadores de tipo genéricos.

Consulte também

Tarefas

Como: Definir um tipo genérico com Reflexo emissão

Conceitos

Quando Usar Coleções Genéricas

Tipos genéricos no Visual Basic

Overview of genéricos in Visual C++

Coleções Genéricas na .NET Framework

Representantes Genéricos para Manipulação de Matrizes e Listas

Interfaces Genéricas

Vantagens e Limitações dos Genéricos

Referência

System.Collections.Generic

System.Collections.ObjectModel

Introdução ao Generics (guia de programação C#)

Outros recursos

Tipos de Coleção Comumente Usadas

Reflexão e tipos genérico

Classes genéricas no .NET Framework