Unidad 24. Cómo programar una clase en VB (III)





24.6. Utilización de los objetos de una clase.

La utilización de los objetos declarados de una clase, dependerá de la implementación de la clase en cuestión, que es la que le proporciona los recursos a los objetos.

La utilización del objeto, una vez declarado, será

 

Asignar valores a las propiedades, si estas lo requieren o lo necesita el código, y si no se ha hecho ya en la declaración del objeto.

Hacer uso de los métodos disponibles de la clase en el momento adecuado.

Finalizar el objeto, si procede, o dejar que la salida del procedimiento acabe con el mismo.

 

El uso dependerá evidentemente del tipo de clase que se haya implementado.

La codificación del uso de la clase puede hacerse bajo dos estilos de código.

El primero podría decirse que es el habitual.

 

Definir

Usar

Y no realizar acciones especificas de finalización, o utilizar la clase GC.

 

  Dim Objeto As New Clase(6)

  Objeto = Nothing

  GC.Collect()

 

Con el método Collet de la clase GC, se obliga a la recuperación de los resursos libres del sistema.

La clase GC, controla el recolector de elementos no utilizados del sistema, es un servicio que reclama de forma automática la memoria que no se utiliza.

Los métodos de esta clase influyen en el momento en que se realiza la recolección de elementos no utilizados de un objeto y en el momento en que se liberan los recursos asignados por un objeto.

Las propiedades de esta clase proporcionan información sobre la cantidad de memoria total disponible en el sistema y la categoría de edad, o generación, de la memoria asignada a un objeto.

 

El segundo, y sobre todo si se consumen muchos recursos del sistema, es utilizar la instrucción Using, End Using.

Con esta instrucción se garantiza la recuperación de los recursos al finalizar el uso de los objetos.

 

 Using Objeto As New Clase(7)

   MsgBox("El valor de la propiedad es " & Objeto.Propiedad & ".")

 End Using

24.7. Secuencia de uso de un objeto.

El objeto creado como instancia de una clase, cuando se libera ejecuta el método finalize de la clase.

Este método existe por defecto.

Ese método se ejecuta siempre de forma predeterminada antes de liberar el objeto.

Por lo tanto todas aquellas acciones que sean imprescindibles realizar antes de que se destruya el objeto se deben realizar en ese método.

Por ejemplo realizar el cierre de archivos, o de una conexión con base de datos.

Para finalizar el uso de un objeto se establece a Nothing, y a partir de ahí la referencia al mismo no es posible.

 

  Objeto = Nothing

 

También podemos preguntar por

 

  If Objeto IsNot Nothing Then ...

 

Lo que nos permite saber si un objeto sigue haciendo referencia a algún recurso.

 

El ejemplo que sigue expresa de forma bastante efectiva la secuencia y el funcionamiento de los métodos Dispose y Finalize, para su correcto funcionamiento hay que poner en las propiedades de proyecto como elemento inicial el Sub Main.

 

Este es el código principal del ejemplo, donde se crean los objetos para la prueba.

 

Module Principal

  Sub Main()

    ' Demostración de como Using llama al método dispose

    Using Objeto As New ClaseHeredera(6)

      MsgBox("El valor de la propiedad después de la “ & _

             “inicialización es " & Objeto.Propiedad & ".")

    End Using

 

    MsgBox("Punto intermedio entre demos.", MsgBoxStyle.Information)

 

    ' Demostración de como el Recolector de objetos

    ' del CLR, Common Lenguage Runtime, llama al método finalize.

 

    Dim OtroObjeto As New ClaseHeredera(6)

    OtroObjeto = Nothing

    GC.Collect()

  End Sub

End Module

 

Y este es el módulo con el código de las clases del ejemplo.

 

Module ClaseDos

  Public Class ClaseBase

    Sub New()

      MsgBox("ClaseBase inicializándose con el método New.")

    End Sub

 

    Protected Overrides Sub Finalize()

      MsgBox("ClaseBase haciendo shutdown con el método Finalize.")

      MyBase.Finalize()

    End Sub

  End Class

 

  Public Class ClaseHeredera

    Inherits ClaseBase

    Implements IDisposable

    Private ValorPropiedad As Integer

 

    Sub New(ByVal Valor As Integer)

      ' La llamada al método New de la clase base ess obligado.

      MyBase.New()

      MsgBox("Clase heredera se inicializa con el método New.")

    

      ValorPropiedad = Valor

    End Sub

 

    Property Propiedad() As Integer

      Get   ' Entrada

        CheckIfDisposed()

        Propiedad = ValorPropiedad

      End Get

      Set(ByVal Value As Integer)  ' Salida

        CheckIfDisposed()

        ValorPropiedad = Value

      End Set

    End Property

 

    Protected Overrides Sub Finalize()

      MsgBox("Clase heredera haciendo shuttdown con el método Finalize.")

      Dispose(False)

    End Sub

 

    ' No añadir Overridable a éste método.

    Public Overloads Sub Dispose() Implements IDisposable.Dispose

      MsgBox("Clase heredera haciendo shuttdown con el método Dispose.")

      Dispose(True)

      GC.SuppressFinalize(Me)

    End Sub

 

    Private disposed As Boolean = False

    Public Sub CheckIfDisposed()

      If Me.disposed Then

        Throw New ObjectDisposedException(Me.GetType().ToString, _

        "Este objeto ha sido liberado.")

      End If

    End Sub

 

    Protected Overridable Overloads Sub Dispose( _

    ByVal disposing As Boolean)

      MsgBox("Clase heredera haciendo shuttdown con el ” & _

             “método Dispose sobrecargado, OverLoad")

 

      ' Código de tareas finales

      If Not Me.disposed Then

        If disposing Then

          ' Dispose de cualquier recurso utilizado.

        End If

        ' Dispose de cualquier recurso.

    

        ' Llamar a MyBase.Finalize si es una clase derivada ,

        ' y la clase base  no ejecuta Dispose.

        MyBase.Finalize()

      End If

      Me.disposed = True

    End Sub

  End Class

End Module

Octubre-2010
Pág. 24.3

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies