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.