Einfache Datentypen?



  • Hallo,

    Einfache datentypen wie int, byte, double, char, short sind ja Primitve typen!

    Über Refelextions kann ich mit IsPrimitve dies ja herausfinden! Was ist denn der Uterschied zwischen IsPrrimitv und IsValueType??

    Grüße



  • In der .NET-Welt wird unterschieden zwischen Reference Types und Value Types. Siehe dazu hier:

    http://www.albahari.com/valuevsreftypes.aspx



  • int, double etc. sind primitive typen und auch value typen.
    enum, struct sind nur value typen.



  • hmm... ok verstehe,

    d.h.

    DateTime a= DateTime.Now;
    
    DateTime b= a;
    

    hier wird das object kopiert nich die referenze... was ValueTypen und ReferenzTypen sind, ist in .NET fix definiert oder? Ich könnte jetzt keinen eigent typ implementieren welcher sich wie ein value typ verhält?

    Da fehlen ja copy-ctor und so zeugs um tiefe kopieren von objeckten über zuweisungen zun zu können??



  • hier wird das object kopiert nich die referenze... was ValueTypen und ReferenzTypen sind, ist in .NET fix definiert oder?

    Ja. Siehe hier: http://msdn.microsoft.com/en-us/library/3ewxz6et.aspx

    Ich könnte jetzt keinen eigent typ implementieren welcher sich wie ein value typ verhält?

    Doch. Indem Du ein struct o.ä. machst.

    Edit:

    Da fehlen ja copy-ctor und so zeugs um tiefe kopieren von objeckten über zuweisungen zun zu können??

    Dafür gibts das IClonable interface mit der Clone() Methode. Wobei hier das Problem ist, dass nicht genau definiert ist, wie Clone() zu impl. ist (tief oder flach).

    Simon



  • ok danke für die aufklärung;)

    Aber die struktur drüfte nur ValueTypen als membes haben damit sie sich wie ein ValueType verhält oder?



  • Nein, du kannst auch Referenztypen verwenden, allerdings wird dann die Referenz kopiert nicht deren Inhalt. Sowas kannst du übrigens durch Ausprobieren selber rauskriegen, dann ist der Lerneffekt höher.

    Edit: Referenz kopiert => d.h. beide Werteobjekte zeigen auf dieselbe Referenz.



  • Hallo,

    danke für die Antworten! Ich hab mich jetzt mal bischen reingelesen, da ich aus der c/C++ Schniene komme und da Instanzen statisch/dynamisch auf dem heap bzw. stack durch angabe des "new" operators bzw. weglassen anlegen kann bin ich bei c# druch die GC technologie noch etwas verwirrt:)

    Deswegen noch ein paar fragen:

    Klassen sind IMMER referenztypen, für die ich Instanzen über die syntax immer/nur mit "new" erzeugen kann?

    Structe sind IMMER Valuetypen, für die ich Instanzen auch immer mit "new" erzeuge muss..

    ValueTypen werden in C# immer auf dem Stack angelegt???? Auser sie sind member eines Referenztypes??

    Der Zuweisungs Operator bei ner Klasse kopiert nur die Referenzn (vergelichseise pointer kopieren in c/c++) ??

    Der Zuweisung Operator bei nem Strukt mach ne tiefe kopie des objekts?

    Danke nochmal



  • Bis auf den letzten Punkt hast du alles richtig erfasst. Dazu hat ja witte schon was geschrieben. Wenn Referenzen in der Struktur sind, dann werden diese nicht tief kopiert. Es wird das kopiert was aufm Stack ist, und das sind nunmal nur die Referenzen, nicht die eigentlichen Objekte wo die Referenzen drauf verweisen.

    Noch was zu den ersten beiden Punkten:

    Klassen sind IMMER referenztypen...
    Structe sind IMMER Valuetypen...

    Das kann man sooo nicht sagen. Man kann problemlos Klassen von ValueType ableiten, so wie Enum es macht und schon ist es ein Valuetype obwohl formal "class" dasteht. Das ist eigentlich das wichtige in .Net: Ist es von ValueType abgeleitet oder nicht. Falls nein, ist es ein Referenztyp, falls ja, ist es ein ValueType. Wenn man das class Schlüsselwort verwendet wird ja implizit von Object abgeleitet, wenn struct als Schlüsselwort verwendet wird, wird implizit von ValueType abgeleitet.


Anmelden zum Antworten