Compartilhar via


about_Calling_Generic_Methods

Descrição curta

Um tipo genérico é uma definição de tipo parametrizado que você instancia com argumentos de tipo concreto (como List<T>), dando código reutilizável e seguro de tipo que o compilador e o CLR lidam com eficiência.

Descrição longa

Os genéricos permitem que você adapte um método, uma classe, uma estrutura ou uma interface para o tipo de dados preciso em que ele atua. Por exemplo, em vez de usar a classe System.Collections.Hashtable , que permite que chaves e valores sejam de qualquer tipo, você pode usar a classe genérica System.Collections.Generic.Dictionary e especificar os tipos permitidos para as propriedades de chave e valor . Genéricos fornecem maior capacidade de reutilização de código e segurança de tipo.

Para alguns métodos genéricos, o PowerShell é capaz de descobrir argumentos genéricos para um método inferindo dos argumentos fornecidos. No entanto, a resolução do método pode ser complicada quando um método tem sobrecargas genéricas e não genéricas ou quando o método genérico não usa nenhum parâmetro formal. O PowerShell pode falhar ao resolver o método correto sem os argumentos de método genérico explícitos.

Por exemplo, [array]::Empty[T](). A classe .NET Array tem um método estático e genérico Empty[T]() que não usa parâmetros formais.

Antes do PowerShell 7.3, para garantir a resolução de método adequada, você precisava usar soluções alternativas complicadas usando a reflexão do .NET. Para obter um exemplo, consulte a postagem no blog de Lee Holmes Invocando métodos genéricos em classes não genéricas no PowerShell.

A partir do PowerShell 7.3, você pode especificar os tipos de um método genérico.

Sintaxe

Um método genérico é um método com duas listas de parâmetros: uma lista de tipos genéricos e uma lista de argumentos de método.

Os exemplos a seguir mostram a nova sintaxe do PowerShell para acessar um método genérico:

# static generic methods
[type_name]::MethodName[generic_type_arguments](method_arguments)

# instance generic methods
$object.MethodName[generic_type_arguments](method_arguments)

O generic_type_arguments pode ser um único tipo ou uma lista separada por vírgulas de tipos, como [string, int], incluindo outros tipos genéricos, como $obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()

O method_arguments pode ser zero ou mais itens.

Para saber mais, confira Genéricos no .NET.

Example

Neste exemplo, criamos uma lista de inteiros e usamos a classe System.Linq.Enumerable para enumerar os valores e transformá-los em um novo valor.

A variável $list é um objeto List[T] genérico que só pode conter inteiros. List[T] é uma classe genérica que permite especificar o tipo de seus membros ao criá-la. [System.Linq.Enumerable]::Select[T1,T2](T1,T2) é um método genérico que exige dois parâmetros de tipo genérico e dois parâmetros de valor formal.

[System.Collections.Generic.List[int]]$list = @( 1, 2, 3, 4, 5 )
$result = [System.Linq.Enumerable]::Select[int, float](
    $list,
    [Func[int, float]]{
        param($Item)
        [Math]::Pow($Item, 3)
    }
)
$result

A saída mostra cada valor elevado à potência de 3.

1
8
27
64
125