Futucando a sobrecarga de operadores do novo VB.NET 2005 (ou 8.0), descobri que é possível sobrecarregar o operador CType(), que é o responsável por converter um tipo em outro. Daí, imaginei: "será possível possível fazer uma estrutura minha se passar por uma estrutura como um Integer?" E não é que deu certo?!
Resolvi compartilhar essa descoberta (pelo menos para mim) pois achei deveras interessante.
A estrutura:
Public Structure MeuInteiro
Private _valor As Integer
Public Sub New(ByVal i As Integer)
Me._valor = i
End Sub
Public Shared Widening Operator CType(ByVal v As MeuInteiro) As Integer
Return v._valor
End Operator
Public Shared Widening Operator CType(ByVal v As Integer) As MeuInteiro
Return New MeuInteiro(v)
End Operator
Public Shared Operator +(ByVal v1 As MeuInteiro, ByVal v2 As MeuInteiro) As MeuInteiro
Return New MeuInteiro(v1._valor + v2._valor)
End Operator
Public Shared Operator =(ByVal v1 As MeuInteiro, ByVal v2 As MeuInteiro) As Boolean
Return v1._valor = v2._valor
End Operator
Public Shared Operator <>(ByVal v1 As MeuInteiro, ByVal v2 As MeuInteiro) As Boolean
Return v1._valor <> v2._valor
End Operator
Public Overrides Function ToString() As String
Return Me._valor.ToString()
End Function
End Structure
O exemplo de utilização:
Dim n As New MeuInteiro(-2) ' Criando um MeuInteiro
Dim i As Integer = n + 6 ' Somando um MeuInteiro a um inteiro e atribuindo a um inteiro
Dim m As MeuInteiro = 6 + n ' Somando um inteiro a um MeuInteiro e atribuindo a um MeuInteiro
MessageBox.Show(Math.Abs(n)) ' Passando um MeuInteiro onde deveria ser um inteiro
MessageBox.Show(i.ToString()) ' Exibindo o valor do inteiro resultante da soma
MessageBox.Show(m.ToString()) ' Exibindo o valor do MeuInteiro resultante da soma
If m = 6 Then ' Comparando um MeuInteiro a um inteiro
MessageBox.Show("Sim, m=6")
Else
MessageBox.Show("Não, m<>6")
End If
Não seria possível fazer isso desta maneira nos antigos VB.NET 2002 e 2003, devido a não-existência da sobrecarga de operadores.
Aliás, quem já estiver utilizando VB 2005, por favor, poste aqui alguns exemplos de novidades (Generics, por exemplo).
Pergunta
Graymalkin
Futucando a sobrecarga de operadores do novo VB.NET 2005 (ou 8.0), descobri que é possível sobrecarregar o operador CType(), que é o responsável por converter um tipo em outro. Daí, imaginei: "será possível possível fazer uma estrutura minha se passar por uma estrutura como um Integer?" E não é que deu certo?!
Resolvi compartilhar essa descoberta (pelo menos para mim) pois achei deveras interessante.
A estrutura:
O exemplo de utilização:Não seria possível fazer isso desta maneira nos antigos VB.NET 2002 e 2003, devido a não-existência da sobrecarga de operadores.
Aliás, quem já estiver utilizando VB 2005, por favor, poste aqui alguns exemplos de novidades (Generics, por exemplo).
Abraços,
Graymalkin
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.