Frage zu Aufruf



  • class ItemDataClass
       {
           public ItemDataClass(string descr,string lang)
           {
               this.descr = descr;
               this.lang = lang;
           }
           string descr;
           string lang;
    
           public string Lang()
           {
               return lang;
    
           }
    
           public override string ToString()
           {
               return descr;
           }
       }
    

    Warum klappt dieser Aufruf nicht :

    Form1.Text = ((ItemDataClass)listBox1.SelectedItem).Lang();
    


  • Es kommt die Fehlermeldung string kann nicht in ItemDataClass gewandelt werden.
    Aber ich hab doch eine tostring Funktion. Oder liegt es an dem Konstruktor ?



  • blurry333 schrieb:

    Oder liegt es an dem Konstruktor ?

    Vermutlich schon - der erwartet nämlich, daß du ihm 2 (in Worten: zwei) Strings übergibst.



  • blurry333 schrieb:

    Es kommt die Fehlermeldung string kann nicht in ItemDataClass gewandelt werden.
    Aber ich hab doch eine tostring Funktion. Oder liegt es an dem Konstruktor ?

    Vermutlich hast du beim Hinzufügen der Listboxitems einfach nur Strings angegeben anstatt Objekte vom Typ ItemDataClass. Deshalb kannst du jetzt nicht casten.

    CStoll schrieb:

    blurry333 schrieb:

    Oder liegt es an dem Konstruktor ?

    Vermutlich schon - der erwartet nämlich, daß du ihm 2 (in Worten: zwei) Strings übergibst.

    Nein, die Instanz wurde bereits erstellt und zur Listbox hinzugefügt. Er versucht jetzt wieder von Object zu ItemDataClass zu casten, um an die Daten ranzukommen. Da ist nix mit Konstruktoraufruf.



  • [quote="GPC"]

    blurry333 schrieb:

    Vermutlich hast du beim Hinzufügen der Listboxitems einfach nur Strings angegeben anstatt Objekte vom Typ DataItemClass. Deshalb kannst du jetzt nicht casten.

    ich glaub das wars 🙂

    aber wundert mich trotzdem dass er die DataItem class nicht in string wandeln kann



  • blurry333 schrieb:

    aber wundert mich trotzdem dass er die DataItem class nicht in string wandeln kann

    Du wolltest doch dort oben kein DataItem in einen String zu verwandeln, sondern genau umgekehrt. Und die beiden Klassen dürften nicht nahe genug verwandt sein, um diese Umwandlung durchführen zu können.

    @GPC: Da war ich wohl zu sehr auf C++ orientiert.



  • [quote="blurry333"]

    GPC schrieb:

    blurry333 schrieb:

    Vermutlich hast du beim Hinzufügen der Listboxitems einfach nur Strings angegeben anstatt Objekte vom Typ DataItemClass. Deshalb kannst du jetzt nicht casten.

    ich glaub das wars 🙂

    aber wundert mich trotzdem dass er die DataItem class nicht in string wandeln kann

    Er kann ja ein ItemDataClass nach string "umwandeln". Was er nicht kann ist string nach ItemDataClass. Und genau diesen Umwandlungsversuch hat dein Aufruf verursacht.

    CStoll schrieb:

    @GPC: Da war ich wohl zu sehr auf C++ orientiert.

    Auch in C++ wäre da kein Ctor aufgerufen worden, da die Listbox intern eine Liste mit bereits instantiierten Objekten vorhält und diese über die "SelectedItem"-Property nur abgerufen werden 😉



  • GPC schrieb:

    Was er nicht kann ist string nach ItemDataClass. Und genau diesen Umwandlungsversuch hat dein Aufruf verursacht.

    Wenn man es genau nimmt, kann er das schon machen, er muss nur den passenden operator dafür überladen 🙂 Aber nativ gehts natürlich nicht.



  • Firefighter schrieb:

    GPC schrieb:

    Was er nicht kann ist string nach ItemDataClass. Und genau diesen Umwandlungsversuch hat dein Aufruf verursacht.

    Wenn man es genau nimmt, kann er das schon machen, er muss nur den passenden operator dafür überladen 🙂 Aber nativ gehts natürlich nicht.

    Klar, da hast du Recht. Aber ich glaube nicht, dass blurry333 weiß, wie man Umwandlungsoperatoren erstellt 😉



  • Das sowieso nicht :p



  • GPC schrieb:

    CStoll schrieb:

    @GPC: Da war ich wohl zu sehr auf C++ orientiert.

    Auch in C++ wäre da kein Ctor aufgerufen worden, da die Listbox intern eine Liste mit bereits instantiierten Objekten vorhält und diese über die "SelectedItem"-Property nur abgerufen werden 😉

    Das kommt ganz auf die beteiligten Typen ab - C++ verwendet auch Konstruktoren, um damit Typumwandlungen durchzuführen.



  • CStoll schrieb:

    GPC schrieb:

    CStoll schrieb:

    @GPC: Da war ich wohl zu sehr auf C++ orientiert.

    Auch in C++ wäre da kein Ctor aufgerufen worden, da die Listbox intern eine Liste mit bereits instantiierten Objekten vorhält und diese über die "SelectedItem"-Property nur abgerufen werden 😉

    Das kommt ganz auf die beteiligten Typen ab - C++ verwendet auch Konstruktoren, um damit Typumwandlungen durchzuführen.

    Stimmt auch wieder, getreu dem C++ Umwandlungsmotto.. "Was nicht passt, wird passend gemacht" 😃


Anmelden zum Antworten