Variable aus einer anderen Klasse?
Hallo,
ich versuche eine einen Wert aus einer anderen Klasse in einer anderen Klasse zu verwenden:
Klasse Alpha:
Wie kann ich nun in Klasse Bravo auf den Wert Zugreifen der dort gespeichert wurde ?
Mein Lösungsvorschlag, der nicht funktioniert, war das ich folgendes mache:
Nun kann ich in der Klasse Bravo folgendes machen =>
Alpha.Instance.TxbPfad
Aber er gibt mir immer Null zurück und wirft den NullRef fehler, was mach ich falsch ?
4 Antworten
Eine Möglichkeit wäre es, in Klasse A eine Referenz zu Klasse B zu hinterlegen, die bspw. beim Aufruf des Konstruktors gesetzt wird. Dann bestände über diese ein Zugriff auf Methoden und Eigenschaften. Wenn es sich um ViewModels im MVVM-Pattern handelt, sollte hier allerdings mit Bedacht gehandelt werden. Die ViewModel-Instanzen legt man ja schließlich nicht mehr unbedingt selbst an.
Der MVVM-Weg wäre der über ein Messenger-System (schau dir bspw. den Event Aggregator an, das Publish-subscribe-Pattern) oder Alternativen wie Event Broker / Mediator.
Den Weg über static gehen zu wollen (sei es nun eine Singleton-Instanz oder nicht) lehne ich eher ab, das ist viel mehr eine bad practice. Versuche das Problem mit Instanzen zu lösen und ohne solche direkten Verbindungen, die im Prinzip das objektorientierte Konzept unterlaufen.
Welche variable willst du denn jetzt genau habrn?
Hallo,
Mach eine getter methode. Das get was du bis jetzt hast, ist keine vollständige getter methode. Schreib also: public void getTxbPfad(String txpPfad) {return txbPfad;}
Diese methode kannst du dann in der anderen klasse aufrufen mit Alpha.getTxbPfad(); <- darin ist deine variable gespeichert.
Beachte, dass fu die klasse alpha noch in der zweiten klasse initialisieren musst.
Viele Grüße
myLocalVar = myClass.getMyVarVal();
was mach ich falsch ?
Anscheinend verwechselst du Klassen mit Objekten. In der Klasse wird unter regulären Umständen gar nichts gespeichert, sondern wenn dann in Objekten dieser Klasse.
Was du gemacht hast, ist, dass du (anscheinend ohne es zu verstehen) in der Klasse einen statischen Verweis auf ein neues Alpha()-Objekt erzeugt hast. Diese Alpha-Objekt ist aber trotzdem noch immer leer und auch der String txbPfad ist nicht gesetzt (= null).
Genau das teilt dir dein Compiler bzw. die IDE mit.
Das bedeutet das ich mittels => public static readonly Alpha Instance = new Alpha();
Keine Instance erstelle wo ich dann aus einer anderen Klasse drauf zugreifen kann?
Dachte das so würde das Singelton-Muster laufen
Siehe hier => https://stackoverflow.com/questions/44734112/c-sharp-set-from-another-class-and-get-from-another-class
Prinzipiell geht es schon in die Richtung.
Kannst dir ja mal das hier anschauen, das ist eine gute Erläuterung zum Singleton pattern:
Hey,
die TxbPfad .
Es ist eine WPF Anwendung und dort wird ein Wert gespeichert den ich später abrufen möchte.