[C#] Setter und Getter

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flu, 13. Mai 2008 .

  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
     
  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.
     
  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
     
  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
     
  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!
     
  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
     
  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;
     }
     }
    }
    
     
  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.
     
  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
     
  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
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.