Problem mit eigener Price-Klasse



  • Ich hab da ein Problem in C#. Ich hab eine Klasse Price geschrieben, die einen Wert und eine Währung besitzt:

    public class Price
    {
        public decimal Value { get; set; }
        public string Currency { get; set; }
    
        public Price(decimal value, string currency)
        {
            Value = value;
            Currency = currency;
        }
    
        public override string ToString()
        {
            return Value.ToString() + Currency;
        }
    }
    

    Jetzt soll es auch möglich sein, dass ich für alle Objekte der Klasse gleichermaßen festlege, dass in der ToString nur der Wert (ohne Währung) ausgegeben wird. Also hab ich ein statisches Property gemacht, um das zu steuern. Die Klasse sieht jetzt so aus:

    public class Price
    {
        // Neu
        public static bool ShowCurrency { get; set; }
    
        static Price()
        {
            ShowCurrency = true;
        }
        // Ende Neu
    
        public decimal Value { get; set; }
        public string Currency { get; set; }
    
        public Price(decimal value, string currency)
        {
            Value = value;
            Currency = currency;
        }
    
        public override string ToString()
        {
            return Value.ToString() + Currency;
        }
    }
    

    Aber irgendwie funktioniert es nicht. Wenn ich in der Main am Anfang schreibe

    Price.ShowCurrency = false;
    

    dann wird trotzdem noch beides (Wert und Währung) ausgegeben.

    Woran kann das liegen? Bitte helft mir!



  • [zensiert]

    ShowCurrency schau mal ob Du diese Eigenschaft überhaupt im ToString auswertest.

    Bitte erst mal nachdenken und dann Posten.



  • Hä? Wieso auswerten? Die Variable (ShowCurrency) kann doch gar keinen ungültigen Wert haben, den ich abfangen müsste. Was soll ich da auswerten? Bei so Prozentangaben würde ja eine Auswertung Sinn machen:

    if (Prozent < 0 || Prozent > 100)
        throw new Exception();
    

    etc.
    Aber bei ShowCurrency sind doch beide möglichen Werte immer gültig.



  • Lesen hilft.





  • MFK schrieb:

    Lesen hilft.

    Ja, was meint ihr jetzt genau? Ich weiß echt nicht weiter.



  • Edit: Trollfutter entfernt.



  • die anderen wollen sagen: wo ueberpruefst du ob ShowCurrency true oder false ist?



  • Mr Evil schrieb:

    die anderen wollen sagen: wo ueberpruefst du ob ShowCurrency true oder false ist?

    Na, das passiert doch im Setter und im Getter. set setzt den Wert auf true oder false. Und get fragt das dann ab.



  • Und dann?

    Du mußt Deinem Programm doch irgendwie mitteilen, was mit der Variablen ShowCurrency passieren soll, sprich Du mußt sie irgendwo auswerten. Am besten in der ToString() Methode. 😉
    Der Compiler weiß schließlich nicht, was ShowCurrency bedeutet.



  • Fifo schrieb:

    Und dann?

    Du mußt Deinem Programm doch irgendwie mitteilen, was mit der Variablen ShowCurrency passieren soll, sprich Du mußt sie irgendwo auswerten. Am besten in der ToString() Methode. 😉
    Der Compiler weiß schließlich nicht, was ShowCurrency bedeutet.

    Hä? Sorry, ich weiß im Moment echt nicht, was du meinst. ShowCurrency ist doch ein Klassenmember. Das heißt, er ist dem Compiler doch bekannt. Wieso weiß er nicht, was das bedeutet? Er sieht doch, dass es ein public Property mit Setter und Getter ist. Ist ja nicht so, dass das irgendein Makro wäre.
    Könntest du mir bitte ein Stück Code posten, das zeigt, was du meinst?



  • Obvious troll is obvious.



  • Du sagst dem Programm nicht was es machen soll wenn ShowCurrency auf true oder false steht.Also macht das Programm nichts ausser den Wert zu speichern und ihn wieder zurück zugeben.Und das hat keinerlei Einfluss darauf was in ToString gemacht wird.



  • Ja, aber wie genau muss ich das denn jetzt umsetzen. Ich sag doch schon ShowCurrency oder eben !ShowCurrency. Was ist daran falsch? Ich bin am Verzweifeln.



  • Hat keiner eine Idee? 😞



  • Doch, die wurden alle schon gepostet, du warst/bist nur nicht in der Lage zu verstehen was wir meinen, obwohl es so trivial ist 😃 Na dann viel Spass weiterhin.



  • Ach, was soll's? Ich geb die Programmierung jetzt auf und benutz den Computer nur noch zum Pornos schauen.



  • Hakan B. schrieb:

    Ach, was soll's? Ich geb die Programmierung jetzt auf und benutz den Computer nur noch zum Pornos schauen.

    Das nennt man eine Win-Win Situation. Deinen Computer haste dann nicht ganz sinnlos angeschafft und wir haben endlich wieder Ruhe hier.



  • Hallo

    Du musst in der ToString-Methode das Property auswerten.

    crhische



  • einige haben eine komische art anderen zu helfe....

    wenn die sagen du sollst ShowCurrency auswerten dann meinen die sowas wie :

    public override string ToString()
    		{
    			string tReturnValue;
    			if(ShowCurrency)
    			{
    				tReturnValue = Value.ToString() + Currency.ToString();
    			}
    			else
    				tReturnValue = Value.ToString();
    			return tReturnValue;
    		}
    

Anmelden zum Antworten