Anfänger und CLR



  • Ich hab da mal ein paar grundlegende Fragen zu CLR, da ich absolut nicht verstehe was es ist:

    -wieso CLR und nicht einfach C++, das kommt mir vor wie ein schritt zurück (sysntaxtechnisch betrachtet)?
    -was ist der garbage collector?
    -wieso ^ und nicht * bei pointern?

    naja wir wurden im neuen Semester ins kalte Wasser gescmissen und mir erschließt sich einfach nicht der Sinn hinter der Sache!zumal ich nicht weiss was ich an bekannte c++ Befeheln verwenden kann und was nicht!

    danke



  • wanderameise schrieb:

    -wieso CLR und nicht einfach C++, das kommt mir vor wie ein schritt zurück (sysntaxtechnisch betrachtet)?
    -was ist der garbage collector?

    Sich bei C++ über Syntax zu beschweren find ich schon arg lustig 😉
    CLR ist die Runtime, die Sprache an sich heißt C++/CLI. Die "andere" Syntax kommt zustande weil C++/CLI eine Erweiterung von C++ ist und somit eine zusätzliche Syntax für die neue Funktionalität gefunden werden musste und nicht die Standardsyntax genommen werden konnte. Wenn du nur C++/CLI jetzt kennst sei froh, der erste Versuch, managed C++ war voll für den Mülleimer und wurde zum Glück auch net weiter verfolgt.
    Zu den Fragen, wozu gibts Suchmaschinen oder Wikipedia... .Net Garbage Collector

    -wieso ^ und nicht * bei pointern?

    Weil ^ kein Pointer ist. Pointer zeigen auf feste Adressen, ^ dagegen zeigen auf Objekte aufm Heap die durch den GC bedingt aber die Adresse ändern können, und diese Adressenänderung wird bei diesen Object Handles ^ automatich angepasst was bei Pointer nicht möglich ist. bei Referenzen gibts das gleiche mit der Tracking Reference.

    zumal ich nicht weiss was ich an bekannte c++ Befeheln verwenden kann und was nicht!

    Sprachtechnisch kannst du fast alles weiterbenutzen, aber auf Seite der Klassenbibliothek benutzt man halt die .Net Frameworkklassen und nicht die der C++ Standardbibliothek.



  • und was ist nun konkret der vorteil dieser CLR runtime?



  • - es ist einfacher Fenster zu erzeugen mit allem drum und dran (im Vergleich zu MFC z.B.)
    - durch die Klassen hat man im Allgemeinen auch mehr Hilfsmittel
    - Speicherverwaltung ist sicherer ("Lücken" im Speicher vermeiden, Zeiger auf falsche Bereiche etc. weniger Abstürze)



  • C.M.Obrecht schrieb:

    - es ist einfacher Fenster zu erzeugen mit allem drum und dran (im Vergleich zu MFC z.B.)
    - durch die Klassen hat man im Allgemeinen auch mehr Hilfsmittel
    - Speicherverwaltung ist sicherer ("Lücken" im Speicher vermeiden, Zeiger auf falsche Bereiche etc. weniger Abstürze)

    Wobei 1. und 2. nichts mit der CLR ansich zu tun haben, sondern mit dem .NET Framework.



  • also ist string^ kein pointer auf string sondern ein zeiger auf ein objekt?
    wie übergebe ich einen string als parameter einer funktion?

    void foo(string^ name){}
    


  • ^ wird nur mit managed Typen verwendet und string (std::string) ist ein unmanaged Typ.

    Z.B. mit System::String,

    void test(System::String^ str)
    {
       Console::WriteLine(str);
    }
    


  • danke!
    noch eine fragen, ohne gleich einen neuen thread zu erstellen:

    ich möchte ein rechteck zeichnen, jedoch in ein panel, um dies auch jederzeit per button zu löschen:

    das sind die entsprechenden befehle:

    quadrat1=gcnew Quadrat(c); 
    this->Controls->Add(this->quadrat1);
    this->quadrat1->Location = System::Drawing::Point(a*c, b*c);
    

    er klappt soweit einwandfrei, nur eben wird das quadrat in der form selbst gezeichnet und ich möchte es in einem panel, sofern sich dieser dafür eignet!
    am besten noch auf knopfdruck!

    danke



  • wanderameise1 schrieb:

    ...

    quadrat1=gcnew Quadrat(c); 
    this->Controls->Add(this->quadrat1);
    this->quadrat1->Location = System::Drawing::Point(a*c, b*c);
    

    ...

    Schaut ja an sich gut aus, nur Überleg mal auf was der this-Pointer zeigt? ich würde mal sagen auf die Form, und nicht aufs Panel. Also das ganze mit dem Panel ausführen und schon klappts.

    Und wenn du das ganze in ein Button_Click-Event legst, hast du es auf Knopfdruck.

    Nebenbei zum löschen musst du es wieder aus der Controls-Liste mit Remove oder Delete (Weiß nimmer genau welche von beiden) entfernen.
    Ob du das ganze Objekt noch zerstören musst bin ich grad überfragt, von reinen C++ her würd ichs machen, aber da es mit gcnew erstellt wurde, sollte es durch den GC gelöscht werden. Vllt kann da noch wer anders was dazu sagen.

    Mfg Marc-O


Anmelden zum Antworten