Ramon Torras

TECHNOLOGY ENTHUSIAST

Uso de generico en VB 2005

Realmente esta todo hecho en .net !
 
Todas las estructuras de datos listas, pilas, tablas de hash,etc..  estan todas hechas.
En VB esta un tipo llamado generico donde tu puedes declarar cualquier estructura de datos y luego en modo de ejecucion definiremos.
 
Pero si por si acaso queremos definir una estructura a nuestra manera podemos utilizar una herramienta muy util que ya existia antes en otro lenguajes denominado Templates. En Visual Basic se llaman  Generic.  y a la hora de definir una classe se puede poner T o lo que se quiera
 
 
Class MiColeccion(Of T)

    Sub Add(ByVal ValueAs T)
        ‘…
    End Sub
End Class

 
Luego en la creacion del objeto:
 
dim coleccion as MiColeccion(Of String)
 
En el siguiente link podeis ver una pequeña explicacion sobre esto. LINK
Aparte os encontrareis a menudo que si quereis utilizar una lista pero de un tipo determinado lo mejor es utilizar el generic.
Pero hay un pequeño problema. Todos lo que sea tratar la lista como ordenar, comparar elementos etc.. son metodos que los has de definir tu mismo.
A continuación expongo un pequeño ejemplo de un array de tipo Usuario muy util para ver como se implementa el SORT y el EXIST (TrobaUsuari).
 
 

Public Class Form1

 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

  Dim users As New CUsuaris

  users.add(New CUsuari( pepe , 01 ))
  users.add(
New CUsuari( bages , 01 ))
  users.add(
New CUsuari( Antoni , 01 ))
  users.TrobaUsuari(
pepe )
  users.Ordena()

End Sub
End
Class

Class CUsuari

 Implements IComparer(Of CUsuari)

  Private _Nom As String
  Private _Login As String

  Sub New(ByVal Nom As String, ByVal Login As String
    _Nom = Nom 
    _Login = Login
End Sub

Property Nom() As String
  Get
    Return _Nom
  End Get
 
Set(ByVal value As String)
    _Nom = value
End Set
End Property

Property Login() As String
  Get
    Return _Login
  End Get
  Set(ByVal value As String)
    _Login = value
  End Set
End Property

Public Function Compare(ByVal x As CUsuari, ByVal y As CUsuari) As Integer Implements System.Collections.Generic.IComparer(Of CUsuari).Compare

 If x Is Nothing Then
   If y Is Nothing Then
    
Return 0
  
Else
    
Return -1
  
End If

 Else
  
If y Is Nothing Then
    
Return 1
  
Else
    
Return x.Nom.CompareTo(y.Nom)
  
End If
 
End If
End Function
End
Class

Class CUsuaris
  Private _Usuaris As List(Of CUsuari)
  Public Property Usuaris() As List(Of CUsuari)
    Get
      Return Me._Usuaris
    End Get
    Set(ByVal value As List(Of CUsuari))
      Me._Usuaris = value
    End Set
End Property

Sub add(ByVal user As CUsuari)
   Try
     _Usuaris.Add(user)
   Catch ex As Exception
     Throw New Exception(ex.Message) 
   End Try
End Sub

Sub New()
    _Usuaris =
New List(Of CUsuari)
End Sub

Public Function TrobaUsuari(ByVal NomUser As String) As Boolean
   For Each usu As CUsuari In _Usuaris
     If usu.Nom = NomUser Then 
      Return True
     End If 
   Next
  
Return False
End Function

Sub Ordena()
    Me.Usuaris.Sort(New CUsuari( , ))
End Sub

End Class

—————————————————————————————————————————-

Espero que os sirva de ayuda
Saludos

Comments are currently closed.