Logikproblem mit .NET universial Typ und casting



  • Hallo

    Ich habe nur eine einzige Frage bzgl. C++/CLI,
    eigentlich nur ein Verständnisproblem.
    Ich nehm mal vorweg das ich kein n00b oder sowas bin ^^

    Wenn ich auch nur irgend eine Instanz in einem Typ wie zb. System::Collections::Hashtable oder ArrayList speichere wird dieser sofort in System::Object umgewandelt und ich kann ihn (ohne casten) nicht mehr benutzen.
    A) Warum ist das so?
    😎 Wozu wird das gemacht?

    Beispiel:

    Foo->Add("abc", gcnew ArrayList())
    Foo["abc"]->Add.... funktioniert nicht (da Add keine Methode von System::Object ist).

    safe_cast<ArrayList^>( Foo["abc"] )->Add...... funktioniert aber sehr wohl - weil es natürlich gecastet wird.
    Meine Frage ist nur muss das sein, ist das richtig so oder verstehe ich hier offensichtlich etwas nicht - das ist doch umständlich.

    Naja wäre dankbar wenn mir jemand diese Frage beantworten könnte.



  • ...weil C++ ein statischer Typprüfer ist. Schau Dir mal generische Container an.
    List<T> usw.



  • Hmm okay schon klar, naja ich dachte irgendwie es gibt trozdem noch ne bessere Möglichkeit - aber jetzt hab ich wenigstens eine Antwort - danke 🙂



  • Ich nehm mal vorweg das ich kein n00b oder sowas bin ^^

    System::Object ist die Basisklasse im Framework. Die von Dir genannten Container nehmen diesen Basistyp auf. Die Regeln sind dann exakt aus dem guten alten C++ abzuleiten, wenn Du da nen vector auf base hast, kannst Du ohne casten auch nur base verwenden.


Anmelden zum Antworten