Vamos a guardar todo un objeto (incluyendo los valores de sus atributos) en un fichero. En primer lugar, tendremos que indicar "[Serializable]" antes de la clase:
[Serializable]
public class Persist02
En segundo lugar, como vamos a sobrescribir todo el objeto, en vez de sólo los atributos, ahora los métodos "Cargar" y "Guardar" ya no pueden pertenecer a esa misma clase: deberán estar en una clase auxiliar, que se encargue de salvar los datos y recuperarlos. En este primer ejemplo, nos limitaremos a declararlos "static" para que sea Main el que se encargue de esas tareas:
public static void Guardar(string nombre, Persist02 objeto)
El programa completo podría ser algo como
// Ejemplo_09_02a.cs
// Ejemplo bsico de persistencia
// Introduccin a C#, por Nacho Cabanes
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Persist02
{
int numero;
public void SetNumero(int n)
{
numero = n;
}
public int GetNumero()
{
return numero;
}
// Mtodos para guardar en fichero y leer desde l
public static void Guardar(string nombre, Persist02 objeto)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(nombre,
FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, objeto);
stream.Close();
}
public static Persist02 Cargar(string nombre)
{
Persist02 objeto;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(nombre,
FileMode.Open, FileAccess.Read, FileShare.Read);
objeto = (Persist02)formatter.Deserialize(stream);
stream.Close();
return objeto;
}
public static void Main()
{
Persist02 ejemplo = new Persist02();
ejemplo.SetNumero(5);
Console.WriteLine("Valor: {0}", ejemplo.GetNumero());
Guardar("ejemplo.dat", ejemplo);
Persist02 ejemplo2 = new Persist02();
Console.WriteLine("Valor 2: {0}", ejemplo2.GetNumero());
ejemplo2 = Cargar("ejemplo.dat");
Console.WriteLine("Y ahora: {0}", ejemplo2.GetNumero());
}
}
Y su resultado sería el mismo que antes:
Valor: 5
Valor 2: 0
Y ahora: 5
Ejercicios propuestos:
Ejercicio propuesto 9.2.1: