Tutorial: Conservar un objeto en Visual Studio (Visual Basic)
Aunque puede establecer las propiedades de un objeto en los valores predeterminados en el tiempo de diseño, cualquier valor que se establezca en tiempo de ejecución se pierde cuando se destruye el objeto. Puede usar la serialización para conservar los datos de un objeto entre instancias, lo que le permite almacenar valores y recuperarlos la próxima vez que se cree una instancia del objeto.
Nota
En Visual Basic, para almacenar datos simples, como un nombre o número, puede utilizar el objeto My.Settings. Para obtener más información, vea My.Settings (Objeto).
En este tutorial, creará un objeto Loan sencillo y conservará sus datos en un archivo. Después, recuperará los datos del archivo cuando vuelva a crear el objeto.
Importante
En este ejemplo se crea un nuevo archivo, si este no existe aún. Si una aplicación debe crear un archivo, debe Create permiso para la carpeta. Los permisos se establecen mediante el uso de las listas de control de acceso. Si el archivo ya existe, la aplicación necesitará solo un permiso Write, un permiso menor. Siempre que sea posible, resulta más seguro crear el archivo durante la implementación y conceder solo permisos Read a un único archivo (en lugar de crear permisos para una carpeta). Además, es más seguro escribir datos en carpetas de usuario que en la carpeta raíz o en la carpeta Archivos de programa.
Importante
En este ejemplo se almacenan datos en un archivo binario. Estos formatos no deben usarse para datos confidenciales, como contraseñas o información de tarjetas de crédito.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, haga clic en Importar y exportar configuraciones en el menú Herramientas . Para más información, vea Personalizar el IDE de Visual Studio.
Crear el objeto Loan
El primer paso consiste en crear una clase Loan y una aplicación de prueba que use la clase.
Para crear la clase Loan
Cree un nuevo proyecto de bibliotecas de clases y denomínelo "LoanClass". Para más información, vea Crear soluciones y proyectos.
En el Explorador de soluciones, abra el menú contextual del archivo Class1 y pulse Cambiar nombre. Cambie el nombre del archivo a
Loany pulse ENTRAR. Al cambiar el nombre del archivo también se cambiará el nombre de la clase aLoan.Agregue los siguientes miembros públicos a la clase:
Public Class Loan Implements System.ComponentModel.INotifyPropertyChanged Public Property LoanAmount As Double Public Property InterestRate As Double Public Property Term As Integer Private p_Customer As String Public Property Customer As String Get Return p_Customer End Get Set(ByVal value As String) p_Customer = value RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Customer")) End Set End Property Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _ Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Public Sub New(ByVal loanAmount As Double, ByVal interestRate As Double, ByVal term As Integer, ByVal customer As String) Me.LoanAmount = loanAmount Me.InterestRate = interestRate Me.Term = term p_Customer = customer End Sub End Class
También tendrá que crear una aplicación sencilla que use la clase Loan.
Para crear una aplicación de prueba
Para agregar un proyecto de Aplicación de Windows Forms a su solución, en el menú Archivo, seleccione Agregar, Nuevo proyecto.
En el cuadro de diálogo Agregar nuevo proyecto, pulse Aplicación de Windows Forms y escriba
LoanAppcomo el nombre del proyecto y, después, haga clic en Aceptar para cerrar el cuadro de diálogo.En el Explorador de soluciones, elija el proyecto de LoanApp.
En el menú Proyecto, seleccione Establecer como proyecto de inicio.
En el menú Proyecto , elija Agregar referencia.
En el cuadro de diálogo Agregar referencia, pulse la pestaña Proyectos y, después, elija el proyecto de LoanClass.
Haga clic en Aceptar para cerrar el cuadro de diálogo.
En el diseñador, agregue cuatro controles TextBox al formulario.
En el Editor de códigos, agregue el siguiente código:
Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black") Private Sub Form1_Load() Handles MyBase.Load TextBox1.Text = TestLoan.LoanAmount.ToString TextBox2.Text = TestLoan.InterestRate.ToString TextBox3.Text = TestLoan.Term.ToString TextBox4.Text = TestLoan.Customer End SubAgregue un controlador de eventos para el evento
PropertyChangedal formulario con el código siguiente:Public Sub CustomerPropertyChanged( ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs ) Handles TestLoan.PropertyChanged MsgBox(e.PropertyName & " has been changed.") End Sub
En este punto, podrá compilar y ejecutar la aplicación. Tenga en cuenta que los valores predeterminados de la clase Loan aparecen en los cuadros de texto. Intente cambiar el valor de la tasa de interés de 7,5 a 7,1 y, después, cierre la aplicación y ejecútela de nuevo; el valor vuelve a ser el valor predeterminado de 7,5.
En el mundo real, las tasas de interés cambian periódicamente, pero no necesariamente cada vez que se ejecuta la aplicación. En lugar de hacer que el usuario actualice la tasa de interés cada vez que se ejecuta la aplicación, es mejor conservar la tasa de interés más reciente entre instancias de la aplicación. En el paso siguiente, hará esto agregando la serialización a la clase Loan.
Usar la serialización para conservar el objeto
Para conservar los valores de la clase Loan, primero debe marcar la clase con el atributo Serializable.
Para marcar una clase como serializable
Cambie la declaración de clase para la clase Loan de la manera siguiente:
<Serializable()> Public Class Loan
El atributo Serializable indica al compilador que todo el contenido de la clase puede conservarse en un archivo. Como el evento PropertyChanged está controlado por un objeto de Windows Forms, no puede serializarse. El atributo NonSerialized puede usarse para marcar miembros de clase que no deben conservarse.
Para evitar que un miembro se serialice
Cambie la declaración del evento
PropertyChangedde la manera siguiente:<NonSerialized()> Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _ Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
El siguiente paso consiste en agregar el código de serialización a la aplicación LoanApp. Para serializar la clase y escribirla en un archivo, usará los espacios de nombres System.IO y System.Xml.Serialization. Para evitar escribir los nombres completos, puede agregar referencias a las bibliotecas de clase necesarias.
Para agregar referencias a los espacios de nombres
Agregue las instrucciones siguientes en la parte superior de la clase
Form1:Imports System.IO Imports System.Runtime.Serialization.Formatters.BinaryEn este caso, está usando un formateador binario para guardar el objeto en un formato binario.
El siguiente paso es agregar código para deserializar el objeto del archivo cuando el objeto se crea.
Para deserializar un objeto
Agregue una constante a la clase para el nombre de archivo de los datos serializados.
Const FileName As String = "..\..\SavedLoan.bin"Modifique el código en el procedimiento de evento
Form1_Loadde la manera siguiente:Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black") Private Sub Form1_Load() Handles MyBase.Load If File.Exists(FileName) Then Dim TestFileStream As Stream = File.OpenRead(FileName) Dim deserializer As New BinaryFormatter TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan) TestFileStream.Close() End If AddHandler TestLoan.PropertyChanged, AddressOf Me.CustomerPropertyChanged TextBox1.Text = TestLoan.LoanAmount.ToString TextBox2.Text = TestLoan.InterestRate.ToString TextBox3.Text = TestLoan.Term.ToString TextBox4.Text = TestLoan.Customer End SubTenga en cuenta que primero debe comprobar que existe el archivo. Si existe, cree una clase Stream para leer el archivo binario y una clase BinaryFormatter para traducirlo. También necesita convertir del tipo de secuencia al tipo de objeto Loan.
Después, debe agregar código para guardar los datos que se han escrito en los cuadros de texto en la clase Loan y, luego, debe serializar la clase en un archivo.
Para guardar los datos y serializar la clase
Agregue el código siguiente al procedimiento de eventos
Form1_FormClosing:Private Sub Form1_FormClosing() Handles MyBase.FormClosing TestLoan.LoanAmount = CDbl(TextBox1.Text) TestLoan.InterestRate = CDbl(TextBox2.Text) TestLoan.Term = CInt(TextBox3.Text) TestLoan.Customer = TextBox4.Text Dim TestFileStream As Stream = File.Create(FileName) Dim serializer As New BinaryFormatter serializer.Serialize(TestFileStream, TestLoan) TestFileStream.Close() End Sub
En este punto, podrá compilar y ejecutar la aplicación de nuevo. Inicialmente, los valores predeterminados aparecen en los cuadros de texto. Pruebe a cambiar los valores y escriba un nombre en el cuarto cuadro de texto. Cierre la aplicación y, después, ejecútela de nuevo. Tenga en cuenta que los valores nuevos aparecen ahora en los cuadros de texto.