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
Vantagens e Limitações dos Genéricos
Referência
System.Collections.ObjectModel
Introdução ao Generics (guia de programação C#)