Ir para o conteúdo

Métodos de extensão

Os métodos de extensão permitem aos programadores adicionar novas funcionalidades personalizadas aos tipos de dados já definidos sem ter de criar um tipo derivado. Com os métodos de extensão é possível adicionar um método ou função que pode ser chamado directamente numa instância de um tipo já existente, no entanto, não é possível definir uma propriedade de extensão, campo ou evento. Em todos os métodos de extensão deve ser atribuído o atributo de extensão <Extension()> que está no namespace System.Runtime.CompilerServices.

Exemplos

Adicionar extensões ao tipo de dados 'String'

'Esta função vai ser atribuída ao tipo 'String' e vai retornar apenas o primeiro caracter da string
<System.Runtime.CompilerServices.Extension()> _
Public Function ObterPrimeiroCaracter(ByVal S As String) As String
    If S = String.Empty Then
        Return S
    Else
        Return S.Substring(0, 1)
    End If
End Function

'Esta função também vai ser atribuída ao tipo 'String' e vai retornar apenas o ultimo caracter da string
<System.Runtime.CompilerServices.Extension()> _
Public Function ObterUltimoCaracter(ByVal S As String) As String
    If S = String.Empty Then
        Return S
    Else
        Return S.Substring(S.Length - 1, 1)
    End If
End Function

Utilização

'Declara uma string
Dim S As String = "ABC"

'Utiliza as duas funções criadas
Console.WriteLine("Primeiro caracter: " & S.ObterPrimeiroCaracter)
Console.WriteLine("Ultimo caracter: " & S.ObterUltimoCaracter)

Output

Primeiro caracter: A

Ultimo caracter: C

Adicionar extensões ao tipo de dados 'Integer'

'Esta função vai retornar o dobro do valor actual
<System.Runtime.CompilerServices.Extension()> _
Public Function Dobro(ByVal I As Integer) As Integer
    Return I * 2
End Function

Utilização

'Declara uma variável
Dim I As Integer = 1

'Utiliza a função criada
Console.WriteLine("O dobro de I é: " & I.Dobro)

Output

O dobro de I é: 2

Adicionar extensões às classes que implementem a interface 'ICollection'

'Esta função vai verificar se existe algum item na colecção e retorna um valor booleano
<System.Runtime.CompilerServices.Extension()> _
Public Function ContemItems(ByVal L As ICollection) As Boolean
    If L.Count = 0 Then
        Return False
    Else
        Return True
    End If
End Function

Utilização

'Declara uma variável
Dim L As New List(Of String)

'Adiciona um item à lista
L.Add("Olá")

'Utiliza a função criada
If L.ContemItems Then
    Console.WriteLine("Existem itens nesta lista")
Else
    Console.WriteLine("Não existem itens nesta lista")
End If

Output

Existem itens nesta lista