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