Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.08.2014, 02:14

[Gelöst]C# dynmic Object

Hey liebe Community :),

ich hätte da mal wieder eine nette Frage^^

Ist es möglich bei einem dynamic object zur laufzeit irgendwie alle Properties in eine Datei zu speichern?

Also :


C#-Quelltext

1
2
3
4
5
6
7
8
dynamic obj = new Resource(); // obj hat länge der datei, author und title

StreamWriter w = new StreamWriter(_filePath, true);
w.WriteLine(obj.AlleEigenschaften)

und dann das alle Elemente in die File geschrieben werden?

wäre sowas möglich



Mfg

JungleProgger

Ps. also obwohl sie zur entwicklungszeit noch unbekannst ist/sind

Beziehungsweise, wenn eine Klasse A ein interface I implementiert, und ich übergebe das interface in einer Funktion, wie kann ich sagen, gebe mir alle Daten von diesem übergeben Objekt, welches dieses Interface implementiert

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »JungleProgger« (18.08.2014, 02:39)


Toemsel

Treue Seele

Beiträge: 310

Wohnort: OÖ

Beruf: Student und Programmierer

  • Private Nachricht senden

2

18.08.2014, 03:45

obj.GetType().GetProperties(). Durchloopen, Namen + Eigenschaft auslesen und speichern.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

18.08.2014, 06:44

Was allerdings hinsichtlich Vorwärts- und Rückwärtskompatibilität keine sehr gute Idee ist. Eine minimale Änderung an irgendeiner Klasse und keine einzige Datei lässt sich mehr laden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

18.08.2014, 09:02

Der Threadtitel sagt aus, die Frage wäre bereits beantwortet. Darf ich fragen, wie das Problem gelöst wurde?

Vielleicht auch nur für nächstes Mal, allerdings hängt es von den Anforderungen ab, was "die beste" Möglichkeit zur Lösung des Problems darstellt. Warum sind die Typen, deren Werte gespeichert werden müssen, nicht bekannt, warum sind diese nicht bekannt und gibt es denn nichtmal eine gemeinsame Ausgangsbasis (gemeinsame Basisklasse oder gemeinsame Schnittstelle)?
Sollte damit bspw. ein Pluginsystem umgesetzt werden, könnte man darüber nachdenken, ob die Schnittstelle nicht bereits Methoden für das Speichern und Laden von Daten beinhalten sollte. Entweder bekommt das Plugin die Möglichkeit, sich gänzlich selbstständig darum zu kümmern (inklusive Dateizugriffe etc.), oder die Schnittstelle definiert Methoden, die vom Plugin eine Serialisierung (Rückgabe als String oder Byte-Array oder ...) oder Deserialisierung (Übergabe vorher gespeicherter Daten) abverlangen, damit das eigentliche Programm sich um die Speicherung kümmern kann (ob im lokalen Dateisystem, in einer Datenbank oder evtl. mit Cloud-Synchonisation).
Es kann sein, dass das in deinem Fall eine bessere Lösung wäre, es kann aber auch nicht der Fall sein.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

18.08.2014, 09:25

Der bessere Fall wäre hier eindeutig eine Serialisierung für die erforderlichen Typen einzufordern über ein entsprechendes Interface statt wild irgendwelche Member zu iterieren und in Streams zu schreiben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

6

18.08.2014, 09:39

Abgesehen davon würde ich dynamic als unsauber und schwer wartbar bezeichnen.
Definitiv ist es in der Benutzung arschlahm und für Reflection braucht man es nicht.
(Ja, das ist eine Funktionalität die ich aus C# rausschmeißen würde, wenn ich könnte)
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

hawkeye_de

Frischling

Beiträge: 70

Wohnort: Baden-Württemberg

  • Private Nachricht senden

7

18.08.2014, 13:51

Abgesehen davon würde ich dynamic als unsauber und schwer wartbar bezeichnen.
Definitiv ist es in der Benutzung arschlahm und für Reflection braucht man es nicht.
(Ja, das ist eine Funktionalität die ich aus C# rausschmeißen würde, wenn ich könnte)


Dynamic hat aber schon seine Berechtigung. Erstens wird es für das Einbinden von IronPython etc. benötigt und zweitens kann man einige Dinge eleganter lösen, wie z.B. das Visitor-Pattern. Man muss natürlich wissen, wie und wo man es verwendet, in einem performance-kritischen Algorithmus sicherlich nicht.
"Große Geister besprechen Ideen; durchschnittliche Geister besprechen Ereignisse; kleine Geister besprechen andere Leute"

-Admiral USN Hyman Rickover, Vater des 1. Atom U-Boots "Nautilus"

Toemsel

Treue Seele

Beiträge: 310

Wohnort: OÖ

Beruf: Student und Programmierer

  • Private Nachricht senden

8

18.08.2014, 13:51

Was allerdings hinsichtlich Vorwärts- und Rückwärtskompatibilität keine sehr gute Idee ist. Eine minimale Änderung an irgendeiner Klasse und keine einzige Datei lässt sich mehr laden.
Auch hier kann das selbe Problem, wie von dir bereits genannt, auftreten, wenn nicht jedes Property für die Serialisierung explizit ausgewählt wird.
Und wenn das ganze mit einem dynamic object realisiert wird, lässt sich die Datei durchaus ohne Fehler und Exceptions laden.
Abgesehen davon würde ich dynamic als unsauber und schwer wartbar bezeichnen.
Definitiv ist es in der Benutzung arschlahm und für Reflection braucht man es nicht.
(Ja, das ist eine Funktionalität die ich aus C# rausschmeißen würde, wenn ich könnte)
Richtig angewendet erspart das dynamic Schlüsselwort viel Zeit und Aufwand. JungleProgger hat übrigens mit dem dynamic object direkt ins schwarze getroffen.
Nicht existierende Properties werden zur Laufzeit generiert, fall eine Versionsinkompatibilität auftreten sollte. Aber ich denke du hast für deine Aussage sicherlich triftige Gründe, die ich gerne erfahren möchte.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

18.08.2014, 16:50

Auch hier kann das selbe Problem, wie von dir bereits genannt, auftreten, wenn nicht jedes Property für die Serialisierung explizit ausgewählt wird.
Hä? Wenn jeder Typ ein Interface für die Serialisierung implementiert, ist nur dieser Typ für seine Serialisierung zuständig und niemand sonst. Klar, wenn ich den Code in diesem Typ verbocke, habe ich Pech. Ich *kann* aber kompatibel programmieren. Aufwärts und abwärts! Das kannst Du nicht, wenn Du einfach stur alle Properties durch iterierst.

Und wenn das ganze mit einem dynamic object realisiert wird, lässt sich die Datei durchaus ohne Fehler und Exceptions laden.
Klar, aber nur, wenn Du Properties niemals änderst, hinzufügst oder entfernst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

18.08.2014, 17:02

Also ich hatte wie oben auch schon richtig angedeutet Reflection benutzt. Es klappt eigentlich ganu gut. Die Resource implementiert ein Interface, welche ein ganzes Objekt von der implementierenden Klasse zurückgeben soll.


C#-Quelltext

1
2
3
4
public Interface IGetInfo
{
    dynamic GetInfos();
}



Und ich möchte egal welche Resource ich der Speicherklasse übergebe, er soll ALLE Daten der übergebenen Klasse in ein File speichern, was eigentlich soweit auch gut geklappt hatte, erstmals^^

Ich höre grad, Serialisierung ist besser? ich kenne mich damit noch nicht so gut aus, aber habe auch gehört das es in einigen Fällen iwo komplex sein kann, weiss nur nicht was damit gemeint war.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JungleProgger« (18.08.2014, 17:21)


Werbeanzeige