Klassenaufbau
-
Hey!
Ich habe zwei drei Dateien (A, B, C). A referenziert B und C.
Nun muss ich manchmal, wenn sich B ändert, alle A, die dieses B referenzieren, einmal öffnen und schließen.
Ich nutze zur Verwaltung von C-Dateien allerdings einen FileManager, den ich nach jedem Laden einer A-Datei und anschließendem Schließen auch aufrufen muss, um die entsprechende in A referenzierte C-Datei Resource freizugeben (oder zumindest den Zähler runterzählen).
Diesen Aufruf würde ich mir gerne sparen, hat jemand von euch eine Idee, wie ich das am besten lösen kann?
-
Geht das auch verständlicher und was hat das mit Klassen zu tun?
Dateien lesen, verändern, schreiben geht zunächst einmal ohne eigene Klasse.
-
Was hast das mit C# zu tuen?
-
Ja, ich geb zu, es hätte auch gut in Rund um die Programmierung gepasst. Das Programm ist in C# geschrieben, vielleicht gibt es eine Sprachenspezifische Lösung (Dispose oder Ähnliches), daher ist es hier drin.
Klar kann man das alles ohne Klassen machen, aber ich habe hier ein größeres Konstrukt, welches Klassen nunmal erfordert.
Ich versuche mal, es nochmal anders zu erklären:
Ich habe drei Klassen, welche jeweils für einen Dateityp stehen, diesen de/serialisieren und das Model für bestimmte ViewModels/Views darstellen.
In Datei A werden Dateien B und C referenziert. Datei C wird dabei immer über einen FileManager geladen und verwaltet, da es viele Datei-A Objekte im Programm gibt, die die selbe Datei C referenzieren (so muss Datei C nicht mehrfach im Speicher gehalten werden).
Datei A hängt zusätzlich von Datei B ab. Das heißt, wird B verändert, müssen auch alle A-Dateien angepasst werden, welche Datei B referenzieren. Auf diesen Punkt bezieht sich meine Frage, denn ich muss dann jedesmal auch das Filehandle für C zurückgeben (naja, eigentlich zähle ich nur einen Zähler runter..)
Pseudocode:
ChangeFileTypeB(); foreach (string file in allAFilePathesUsingB) { file.open(); // Alles was gemacht werden muss, erfolgt hier // Nun muss das Handle auf Dateityp C zurückgegeben werden.. diesen Aufruf würde ich mir gern sparen.. FileManagerForFileTypeC.ReturnHandle(file.C_filehandle); }
Leider ist es mir schon passiert, dass ich das returnHandle vergessen habe aufzurufen, daher würde ich es irgenwie anders lösen wollen. Ich steh grad aufm Schlauch und bin vielleicht nur müde...
Hoffe, das war etwas verständlicher.