Verwaltete Klasse unter .NET



  • Hallo liebes Forum,

    da ich noch recht neu im Bereich C++ Programmierung bin, möchte ich mal folgende Frage loswerden, die aus meinen Büchern nicht so ganz klar wird.

    Wenn ich unter .NET in C++ eine Klasse erstellen möchte, muss es dann zwangsläufig eine verwaltete Klasse sein?

    Also:

    ref class BlaBla {
    
    };
    

    Eine weitere Frage ist, ob alle Objekte oder Arrays zwangsläufig als verwaltet angelegt werden müssen und dynamisch erzeugt werden müssen?

    Also z.B.

    Tier ^A = gcnew Tier("Zebra", 2);
    

    Und meine letzte Frage zu dem Thema wäre:

    Warum müssen z.B. Datentypen wie String innerhalb einer verwalteten Klasse über einen Trackinghandle als verwaltet deklariert werden, und Datentypen wie int oder float nicht? Oder ist das eine Fehlannahme (ich frage deshlab, weil ich bislang keine Beispiele gefunden habe, die eine andere Zusammensetzung hatten)?

    Beispiel in einer Header-Datei:

    // Klasse
    
    ref class Tier {
    
    // Deklaration von Klassenattributen
    
    int Alter;               // nicht verwaltet?
    float Groesse;           // nicht verwaltet?
    System::String ^Name;    // verwaltet
    
    public:
    
    ....
    
    };
    

    Würde mich über eine kurze Hilfestellung sehr freuen.

    Gruß, Tobias



  • Alter ist vom Type System::Int32 und Grösse vom Type System::Float, es sind also beides managed Typen.

    Das geht z.B.:

    using namespace System;
    
    ref class Test
    {
    public: float value;
    };
    
    int main(array<System::String ^> ^args)
    {
    
        Test^ test = gcnew Test();
        test->value = 5.0;
        test->value = float::Parse(L"2");
        String^ s = test->value.ToString();
    
        return 0;
    }
    


  • PuraVida schrieb:

    da ich noch recht neu im Bereich C++ Programmierung bin,

    Es sei angemerkt, dass Du mit .NET *kein* C++ machst, sondern C++/CLI. Siehe auch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/

    Und: Nein, Du musst keine "verwaltete" Klasse machen... aber wenn Du das nicht willst, dann machst .NET (also C++/CLI) gar keinen Sinn.


Log in to reply