#1 13. Mai 2008 Hi. ich hab eine Frage zu den Setter und Getter Methoden. ist es möglich, eine Variable die in solchen methoden eingesetzt wird, von einer anderen klasse aus mit werten zu füllen? ich geb euch dazu mal ein beispiel: Code: using System; using System.Collections.Generic; using System.Text; namespace Kniffel { class Speicher { public string aktuellerSpeicher; public string WurfSpeicher { get { return aktuellerSpeicher; } set { aktuellerSpeicher = value; } } } } dem String möcht ich jetzt von einer anderen Klasse aus einen Wert zuweisen: Code: namespace Kniffel { public class Wurf { public int wuerfeln() { int i = 1; int Zufallszahl; string ergebnis = ""; string ergebnis1 = ""; string ergebnis2 = ""; string ergebnis3 = ""; string ergebnis4 = ""; while (i < 6) { Random rnd = new Random(); Zufallszahl = rnd.Next(1, 6); Console.WriteLine("Wurf " + i + ": " + Zufallszahl); System.Threading.Thread.Sleep(10); if (i == 1) { string wurf1 = String.Concat(Zufallszahl); ergebnis = String.Copy(wurf1); } if (i == 2) { string wurf2 = String.Concat(Zufallszahl); ergebnis1 = String.Copy(wurf2); } if (i == 3) { string wurf3 = String.Concat(Zufallszahl); ergebnis2 = String.Copy(wurf3); } if (i == 4) { string wurf4 = String.Concat(Zufallszahl); ergebnis3 = String.Copy(wurf4); } if (i == 5) { string wurf5 = String.Concat(Zufallszahl); ergebnis4 = String.Copy(wurf5); } i++; } [B] Speicher aktuellerSpeicher = new Speicher(); aktuellerSpeicher.WurfSpeicher = String.Concat(ergebnis, ergebnis1, ergebnis2, ergebnis3, ergebnis4); aktuellerSpeicher.Aktuell(aktuellerSpeicher.WurfSpeicher); Console.WriteLine("\nGewürfelte Zahlen: " + aktuellerSpeicher.WurfSpeicher); [/B] Auswahl a = new Auswahl(); a.auswahl(); return 0; } } } der dickgedruckte bereich ist der um den es hauptsächlich geht. das andere ist nur da um die funktionsweise zu verstehen. meine Frage: Wie bekomme ich es hin, dass ich auf den Wert, den aktuellerSpeicher.WurfSpeicher erhält von jeder Klasse aus zugreifen kann? am besten wäre es wenn er dann bei den setter und getter methoden (siehe oben) gespeichert wird, sodass von überall darauf zugegriffen werden kann. Ich hoffe ihr versteht mein problem und könnt mir helfen. mfg Flu + Multi-Zitat Zitieren
#2 13. Mai 2008 AW: [C#] Setter und Getter Naja, nicht so wirklich. Deine get und set Accessoren sind doch bereits als public deklariert und sollten von daher von jeder Klasse aus ereichbar sein. Kannst du mir sagen wo das Problem genau liegt, bzw wo eine Exception auftritt? Achja, noch zwei "stil-sachen" 1. Code: [B]public[/B] string aktuellerSpeicher; sollte Code: [B]private[/B] string aktuellerSpeicher; sein. Sonst machen deine Accessoren keinen Sinn. (Ist kein Syntaxfehler!) 2. Code: private string [B]aktuellerSpeicher[/B]; [...] Speicher [B]aktuellerSpeicher[/B] = new Speicher(); Einer Instanz den gleichen Namen wie einer Variablen zu geben macht wenig Sinn und führt nur zu Missverständnissen Edit: @ live2b: Durch die beiden public unter class hab ich doch echt übersehen das die Klasse nicht öffentlich ist. Naja, kann dir nur zustimmen, das Problem sollte damit behoben sein. + Multi-Zitat Zitieren
#3 13. Mai 2008 AW: [C#] Setter und Getter Deine Class hat einen kleinen Fehler. Da Steht kein public davor und die Variable, welcher den Wert speichern soll, ist von Anfang an null, wenn darauf so zugegriffen wird gibts nen Fehler, also Code: namespace Kniffel { public class Speicher { public string aktuellerSpeicher = ""; public string WurfSpeicher... Dann solltest du noch wissen, dass Klassen so genannte Objekte sind, welche sich im Speicher befinden. Um eine Klasse verwenden zu können, musst du diese Instanzieren, dass heist aus der Schablone (Klasse) ein Objekt (z.B. MyClass meineKlasse = new MyClass() erstellen. Somit hast du aber nicht direkt das Objekt in die Variable "meineKlasse" geladen, sondern die Speicheradresse, wo sich das Objekt im RAM befindet. Praktisch gesehen musst du nun diese Adresse an alle Klassen weitergeben, welche damit arbeiten sollen. Sobald du wieder das Schlüsselwort "new" benutzt, wird neu instanziert. Wenn du irgendetwas nicht verstanden haben solltest, sag bescheid! MfG, Live2B + Multi-Zitat Zitieren
#4 13. Mai 2008 AW: [C#] Setter und Getter also wenn man die methode wurf ausführt werden zufällig 5 zahlen in einem string zusammengeführt. diesen gefüllten string möcht ich nun in einer speziellen klassen (in der Klasse Speicher in der setter und getter methode) speichern, sodass ich auf den gefüllten string von jeder anderen Klasse aus zugreifen kann. aber das geht so wie ich das gemacht hab nicht. ich hoffe mein prob ist jetzt klarer. mfg Flu + Multi-Zitat Zitieren
#5 13. Mai 2008 AW: [C#] Setter und Getter Wo ist eigentlich die Methode "aktuellerSpeicher.Aktuell"?? Also in deiner Klasse "Speicher" ist diese schonmal nicht. Ich schmeiss dass mal bei mir in VS rein und guck mal wie es am besten flexibel gelöst werden kann, bis gleich! + Multi-Zitat Zitieren
#6 13. Mai 2008 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: [C#] Setter und Getter ach die hat ich in speicher hinzugefügt, aber wieder weggemacht Code: public void Aktuell(string speicherAktuell) { speicherAktuell = aktuellerSpeicher; } wenn du das komplette programm haben willst zur überprüfung auf verbesserungen: No File | xup.in + Multi-Zitat Zitieren
#7 13. Mai 2008 AW: [C#] Setter und Getter naja das mit dem Aktuell dass hätte eh nie geklappt, der enthaltene Befehl den kannste genau so gut auch weglassen, wäre der gleiche effekt, oder wenn du es wirklich so laufen lassen willst dann vergiss das Wort "ref" vor dem Parameter nicht. Ich habs trotzdem mal bisschen vereinfacht, schaus dir an und sag mir nun genau was dabei nicht geht: Code: using System; using System.Collections.Generic; using System.Text; namespace Kniffel { public class Wurf { public void wuerfeln() { Int32 Zufallszahl; String[] ergebnis = new String[6]; for (Int32 i = 0; i < 6; i++) { Random rnd = new Random(); Zufallszahl = rnd.Next(1, 6); Console.WriteLine("Wurf " + i + ": " + Zufallszahl); System.Threading.Thread.Sleep(10); ergebnis[i] = String.Copy(String.Concat(Zufallszahl)); } Speicher aktuellerSpeicher = new Speicher(); aktuellerSpeicher.WurfSpeicher = String.Concat(ergebnis); Console.WriteLine("\nGewürfelte Zahlen: " + aktuellerSpeicher.WurfSpeicher); } } public class Speicher { private String aktuellerSpeicher; public String WurfSpeicher { get { return aktuellerSpeicher; } set { aktuellerSpeicher = value; } } public void Aktuell(String speicherAktuell) { speicherAktuell = aktuellerSpeicher; } } } + Multi-Zitat Zitieren
#8 13. Mai 2008 AW: [C#] Setter und Getter ok. da klappt alles. nun hab ich aber noch eine weitere klasse(unfertig): Code: namespace Kniffel { public class Auswahl { public int auswahl() { Wurf wuerfe = new Wurf(); string aussortiert; int Wahl; Speicher s = new Speicher(); Console.WriteLine("\nBitte die Zahlen auswählen die behalten werden!\n"); Console.WriteLine("Beispiel: Wenn die Zahlen 13345 gewürfelt wurden und man will\n"); Console.WriteLine("die zwei dreier haben, dann die Zahlen 1 und 2 eintippen!\n"); Console.WriteLine("Man fängt in dem Fall bei null an zu zählen.\n"); Console.WriteLine("Erste Zahl wählen: " \n"); Wahl = Console.ReadLine(); switch(Wahl) { case "1": Console.WriteLine(); return 0; } } } In dieser Klasse soll man jetzt die Zahlen auswählen, die man draußen halten möchte, wie das beim kniffeln ja so ist. dazu sollen die gewählten zahlen aus dem String (der eben beim würfeln gefüllt wurde) gelöscht werden und in einem weiteren string gespeichert werden. die restlichen zahlen die übrig bleiben, sollen nochmal gewürfelt werden. + Multi-Zitat Zitieren
#9 29. August 2008 AW: [C#] Setter und Getter *push* so, das problem ist zwar schon was her, hab auch ne kleine lernpause in sachen C# eingelegt gehabt. hab dann nochmal mein angefangenes kniffelspiel gefunden und mich hat die lust wieder gepackt. doch mit dem kniffelspiel bin ich auch wieder auf das prob aus diesem Thread gestoßen, und um ehrlich zu sein versteh ich das ganze immer noch nicht so genau. hoffe jemand kann es mir nochmal erklären. mfg Flu + Multi-Zitat Zitieren
#10 2. September 2008 AW: [C#] Setter und Getter ich nehme mich einmal deinem problem an. hast du an der klasse noch etwas hinzugefügt oder ist das immer noch der aktuelle stand? vll solltest du dir eine alternative dazu ausdenken ich könnte mir da etwas vorstellen wie mit contains prüfen ob zahl da ist zahl wegmachen dann weitere zahl wählen oder einfach 2 strings vergleichen das würde ganz einfach mit arrays oda so gehen + Multi-Zitat Zitieren