Entwickler-Ecke

IO, XML und Registry - Serialization einer statischen Klasse


shadowrunner - Fr 02.05.08 16:44
Titel: Serialization einer statischen Klasse
Hi Leute, super Forum (*mein erster Thread*)!
Hab mal ne Frage und zwar:
Kann auch eine statische Klasse serialisiert werden?

Hab das bei meinem Programm mal probiert, und zwar so:
-Normalen FileStream und BinaryFormatter erstellt
-[Serialize]-Attribut vor der statischen Klasse gesetzt

Zumindest bei mir ging es so nicht, also nahm ich mal das 'static' vor der Klasse weg (die Felder sind nach wie vor static).
Nun habe ich eine Instanz der (ehemaligen statischen) Klasse erzeugt und abgespeichert. Beim Wiedereinlesen ändert sich aber lt. Debugger nichts!

Ich weiß, dass statische Variablen nur einmal im Speicher vorhanden sind, werden sie jedoch beim Abspeichern einer Instanz der Klasse auch mit abgespeichert? (Schätze nicht )-; )

Gibt es sonst noch eine andere Art das ganze anzugehen? Ich meine ich könnte jedes Feld einfach normal abspeichern, werd ich jetzt mal versuchen, aber ich wäre schon interessiert, ob Ihr vielleicht noch eine andere Art wüsstet!


Chryzler - Fr 02.05.08 17:07

Wieso möchtest du eine statische Klasse als Datei abspeichern und dann wieder einlesen? Ich sehe da keinen Nutzen. Du könntest natürlich eine Struktur erstellen, die exakt die selben Felder hat, und diese serialisieren. Und beim deserialisieren dann genau andersherum.


shadowrunner - Fr 02.05.08 17:13

Bei der statischen Klasse handelt es sich um die Farben des Spielfeldes. Die Farben kann der User im Spiel ändern. Wenn nun das Programm geschlossen wird, sollten die Farben in eine Datei abgespeichert werden und da dachte ich mir, das wäre das Feinste, wenn ich einfach die ganze Klasse abspeichern könnte.
Beim Öffnen des Spieles sollte geschaut werden, ob die Datei existiert und falls ja, wird sie ausgelesen.

Also das mit der Struktur geht bestimmt, aber rein aus Neugier: Weiß einer, ob statische Variablen mitabgespeichert werden? (ich kannsja in der Datei nicht nachlesen und google brachte auch nichts)


Christian S. - Fr 02.05.08 17:39

Hallo und :welcome:!

Für diesen Zweck gibt es schon eine Vorgehensweise: Du findest im Solution Explorer des Visual Studio in Deinem Projekt einen Ordner "Properties" und darin eine Datei "Settings.sesttings". Mach da mal einen Doppelklick. Da kannst Du verschiedene Einstellungen für Dein Projekt anlegen und speichern. Bei jeder Einstellung kannst du sagen, ob es eine Per-User-Einstellung sein soll (scope = User) oder nicht.

Hast Du da Deine Einstellungen angelegt, kannst Du recht einfach drauf zugreifen:

C#-Quelltext
1:
Properties.Settings.Default.DeineEinstellung = "foobar";                    


Geänderte Einstellungen kannst Du speichern mit:

C#-Quelltext
1:
Properties.Settings.Default.Save();                    

Geladen werden die beim Programmstart automatisch.

Grüße
Christian


Kha - Fr 02.05.08 20:05

Der Vollständigkeit halber: Unter "ISerializable" wird die Serialisierung eines Singletons beschrieben. Das erste Mal, dass ich von IObjectReference höre :gruebel: , dürfte beinahe der einzige Anwendungszweck sein.


Christian S. - Fr 02.05.08 20:14

Ah, interessant, kannte ich auch noch nicht :)
Ich hatte vor meiner Antwort oben auch erst an einen Singleton gedacht, aber da ich das noch nicht kannte, verworfen.


shadowrunner - Fr 02.05.08 20:53

Wow, danke für Eure schnelle Hilfe! Werde das alles gleich mal ausprobieren.
Wie gesagt, super Forum!

EDIT: Funktioniert perfekt!!! Danke