Witam,
Pytanie dotyczy możliwości np. zapisania stanu bieżącego obiektu, dajmy na to bardzo prosty obiekt (tylko dla przykładu):
public class MojObiekt
{
private int a;
private int b;
private int c;
public int wynikMnozenia { get; private set; }
public int wynikDodawania { get; private set; }
public MojObiekt()
{
a = 1;
b = 1;
c = 1;
}
public MojObiekt(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public int Pomnoz()
{
wynikMnozenia = a * b * c;
return a * b * c;
}
public int Dodaj()
{
wynikDodawania = a + b + c;
return a + b + c;
}
public void Zapisz(string SciezkaPliku)
{
// kod odpowiedzialny za zapis np do pliku bieżącego stanu publicznych zmiennych
// wynikMnozenia i wynikDodawania
}
}
Teraz chciałbym osiągnąć taki efekt, inicjuje sobie nowy obiekt, w konstruktorze mogę podać zmienne, potem wywołać metody dodawania i mnożenia a na końcu chciałbym za pomocą wywołania metody "Zapisz". Dla przykładu:
class Program
{
static void Main(string[] args)
{
MojObiekt mo = new MojObiekt(1, 2, 3);
mo.Pomnoz();
mo.Dodaj();
//I TU DOKŁĄDNIE CHODZI MI O TO ABY PO WYWOŁANIU PONIŻSZEJ METODY ZAPISAŁO MI LUB PRZETWORZYŁO W INNY SPOSÓB BIEŻĄCY OBIEKT
mo.Zapisz("plik.txt");
}
}
Oczywiście jest to tylko przykład, w rzeczywistości mam klasę która przechowuje wiele informacji i domyślnie chciałbym zapisywać jej stan do XML (serializować) wywołując metodę np. SaveToXML(string LokalizacjaPliku), bez wprowadzania dodatkowych (oprócz lokalizacji pliku) informacji, tak więc metoda miała by odwoływać się do bieżącego obiektu. Czy jest na to jakiś prosty sposób czy w metodzie musiałbym inicjować nowy obiekt i w taki sposób go zapisać? Dla przykładu:
...
public void Zapisz(string SciezkaPliku)
{
MojObiekt mo = new MojObiekt(a, b, c);
mo.Dodaj();
mo.Pomnoz();
StreamWriter sw = new StreamWriter(SciezkaPliku);
sw.Write(mo);
sw.Close();
}
Tak więc czy jest jakaś prostsza metoda niż inicjowanie nowego obiektu i ponowne nadawanie mu parametrów tylko po to aby go zapisać?
Oczywiście jest jeszcze taka możliwość aby w metodzie zapisu jako argument przekazać ów obiekt, dla przykładu:
public void Zapisz(string SciezkaPliku, MojObiekt o)
{
StreamWriter sw = new StreamWriter(SciezkaPliku);
sw.Write(o);
sw.Close();
}
I podczas wywołania skorzystać w ten sposób:
static void Main(string[] args)
{
MojObiekt mo = new MojObiekt(1, 2, 3);
mo.Pomnoz();
mo.Dodaj();
//I TU DOKŁĄDNIE CHODZI MI O TO ABY PO WYWOŁANIU PONIŻSZEJ METODY ZAPISAŁO MI LUB PRZETWORZYŁO W INNY SPOSÓB BIEŻĄCY OBIEKT
mo.Zapisz("plik.txt", mo);
}
Pozdrawiam i czekam na konstruktywne wypowiedzi.