Klasse eines Objektes ändern



  • Haha hab das gerade mit den Rückgabewerten bei Funktionen durcheiander gebracht. Dann ist mein Post natürlich Unsinn, sorry.



  • Hunz schrieb:

    Ein normales Auto ist auch kein Polizeiauto.

    richtig ... aber ein Polizeiauto ist ein Auto ... A ist nicht P - aber P ist A

    Trotzdem kann man ein normales Auto zu einem Polizeiauto umbauen ohne ein neues Auto bauen zu müssen.

    klar ... Du kannst auch über Reflection Deinen Code zur Laufzeit umbauen

    Dein Argument überzeugt mich nicht.

    das ist kein Argument - das ist einen OOP Tatsache



  • Hat diese Tatsache irgendeinen zusammenhang mit meiner Frage?
    Nehmen wir mal den umgekehrten Falls. Angenommen ich will eine Instanz einer abgeleiteten Klasse in eine Instanz der Basisklasse umwandeln. Geht das denn? Ehrlichgesagt stell ich mir das noch viel schwieriger vor. Ich kann die Instanz der abgeleiteten Klasse natürlich so wie eine der Basisklasse bahandeln, aber sie würde dann trotzdem noch eine Instanz der abgeleiteten Klasse bleiben.



  • Hunz schrieb:

    Hat diese Tatsache irgendeinen zusammenhang mit meiner Frage?
    Nehmen wir mal den umgekehrten Falls. Angenommen ich will eine Instanz einer abgeleiteten Klasse in eine Instanz der Basisklasse umwandeln. Geht das denn? Ehrlichgesagt stell ich mir das noch viel schwieriger vor. Ich kann die Instanz der abgeleiteten Klasse natürlich so wie eine der Basisklasse bahandeln, aber sie würde dann trotzdem noch eine Instanz der abgeleiteten Klasse bleiben.

    Ein Objekt wird mit einem bestimmten Typ (Klasse) erzeugt, und behält diesen dann bis zu seinem Lebensende bei. .NET unterstützt keine "Mutation" bestehender Objekte. Weder in die eine noch in die andere Richtung.
    In manchen anderen Sprachen geht es soweit ich weiss. Dafür gibt es dort auch kein brauchbares statisches Typensystem.

    Also. Antwort: es geht nicht. Nach dem "Warum" solltest du diejenigen fragen, die .NET definiert haben. Vor allem wenn du auf Argumente/Erklärungsversuche mit "ist kein Argument für mich" antwortest.

    Mein Tip: leg dich nicht mit der Realität an, denn du wirst verlieren. Es geht nicht, also finde dich damit ab.



  • Ach, ist doch ganz einfach:

    Auto x = new Auto();
    
    // Und jetzt kommt's:
    x = new Polizeiauto(); // Tadaa!
    

    Ich bin ein Genie. 🕶



  • Kinz schrieb:

    Ach, ist doch ganz einfach:

    Auto x = new Auto();
    
    // Und jetzt kommt's:
    x = new Polizeiauto(); // Tadaa!
    

    Ich bin ein Genie. 🕶

    Nein. Es geht um

    Auto^ x=gcnew Auto("BMW",125*PS);
    Auto^ y=x;
    x->promote(Polizeiauto,/*Kennzeichen=*/"WI-4456");
    y->print();//Ich bin ein Polizeiauto von BMW mit 125PS mit dem Kennzeichen WI-4456
    x->print();//Ich bin ein Polizeiauto von BMW mit 125PS mit dem Kennzeichen WI-4456
    

    Also man stopft des Auto in eine Liste, die große alleAutosListe, und kann es in tiefen Unterfunktionen promovieren lassen, ohne den dummen Weg gehen zu müssen, das Auto aus der Liste löschen zu müssen und es durch ein neues Auto ersetzten zu müssen. Würde eh nicht klappen, weil die

    class Fahrer{
       Auto^ auto;
       ...
    };
    

    gar nicht automatisch mitkriegen könnten, daß das Auto gewechsekt wurde. Man will ohne Autowechsel den Typ des Autos ändern.
    Und das geht halt nicht. Weder C++/CLI noch relationale Datenbanken unterstützen Beförderungen in einer höchst angenehmen Weise.



  • Hunz schrieb:

    Hat diese Tatsache irgendeinen zusammenhang mit meiner Frage?

    ja ... Du hast eine OOP-Frage - und das ist dazugehörige OOP-Regel als Antwort

    Nehmen wir mal den umgekehrten Falls. Angenommen ich will eine Instanz einer abgeleiteten Klasse in eine Instanz der Basisklasse umwandeln. Geht das denn?

    jain - denn B ist A ... Mutation - das da wirklich A rauskommt - geht nicht

    Ich kann die Instanz der abgeleiteten Klasse natürlich so wie eine der Basisklasse bahandeln, aber sie würde dann trotzdem noch eine Instanz der abgeleiteten Klasse bleiben.

    richtig ... es ist und bleibt B

    setz Dich bitte mit OOP Allgemein auseinander



  • Es ist eben keine OOP-Frage sondern eine sehr spezielle C#/.NET Frage. Wenn du dann mit so allgemeinem Zeugs kommst das jeder weiss, muss ich halt davon ausgehen, dass du meine Frage nicht verstanden hast.



  • mogel hat ein außergewöhnliches Verständnis von OOP. OOP ginge viel schöner mit solchen Typänderungen. Weil im Außenleben genau solche Sachen passieren. Der Mitarbeiter wird befördert und schwupps, haben wir ein Problem. Wir müssen ihn rauswerfen und als Vorgesetzten neu einstellen. Helau.



  • <Kleinkariert>

    volkard schrieb:

    Wir müssen ihn rauswerfen und als Vorgesetzten neu einstellen.

    das gibt einen neuen Arbeitsvertrag und das ist eine Änderungskündigung (AFAIK)
    </Kleinkariert>


Anmelden zum Antworten