[X] Einführung in C# .Net



  • Polofreak: So wie der Teil über Typen, das könnte ich mir sehr gut vorstellen. Ein Anreißen von C# ist sicherlich für viele hilfreich.

    estartu_de schrieb:

    Referenztypen [...] und werden immer mit null initialisiert

    Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?

    Ich nehme an die C# Referenzen ähneln den von Java.



  • GPC schrieb:

    Polofreak: So wie der Teil über Typen, das könnte ich mir sehr gut vorstellen. Ein Anreißen von C# ist sicherlich für viele hilfreich.

    estartu_de schrieb:

    Referenztypen [...] und werden immer mit null initialisiert

    Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?

    Ich nehme an die C# Referenzen ähneln den von Java.

    Haben die irgendwas mit z.B. int& in C++ zu tun? Da kann man ja blos kein NULL reinstecken, Referenz heißts ja. 😃
    Aber vielleicht wird das ja noch erklärt. 🙂

    Sonst war der Teil schon nett zu lesen.



  • Eher nicht.
    In Java können Referenzen null sein:

    String s = "Hallo";
    s = null;
    

    In C++ eben nicht. Na ja, genaugenommen erwarten wir nur, dass sie etwas referenzieren, haben aber keine Möglichkeit nachzuschauen ob sie's wirklich tun...



  • Talla schrieb:

    ...Aber willst du wirklich nur C# als Sprache betrachten?...

    joa siehe Postings wo ich Beispiel bringe.

    estartu_de schrieb:

    Polofreak, du darfst die Bilder auch gerne bei uns hochladen. 😉

    hm irgendwo hier im Forum stand des wo und wie ich das machen kann, und wie die Bildtags gehen. Oder?

    estartu_de schrieb:

    Alle Typen sind kompatibel zu "Object".

    Also von Object abgeleitet? 😕

    Hm ich muss nochmal nachlesen ich glaub sie sind nicht von Object abgeleitet sind aber ohne expiciten Cast zuweisbar, beim zurückcasten muss man allerdings explizit casten.

    estartu_de schrieb:

    Referenztypen [...] und werden immer mit null initialisiert

    Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?

    zu den primitiven Datentypen gehören hier
    

    Huch, Themenwechsel? Eben war es noch der Abschnitt Referenztypen - da fehlt wohl die Überschrift. 😕

    joa rischtisch hier fehlt die Überschrift und mit den Refernztypen so wie GPC sagt sehr java ähnlich (wie so vieles 🙄 )

    estartu_de schrieb:

    Insgesamt wäre es schön, da hier wohl mehr Leute C und C++ als Java können, wenn du zu beiden Sprachen vergleichen könntest.
    Also noch eine Spalte in die Tabelle z.B. 🙂

    OK die Tabelle könnte man wohl mit C/C++ erweitern aber sonst ist es recht schwer weil es einfach ähnlicher zu java ist.



  • ich hab mir den Thread nochmal durchgelesen und wenn ich das richtig verstanden habe, dann fang ich mal an, ein wenig zu schreiben. Dann will ich nochmal kurz fragen, soll ich das hier weiter führen oder soll ich einen neuen Thread aufmachen? Tut mir leid wenn ich vielleicht noch den einen oder anderen Fehler mache, ist halt mein erster Artikel. *shy*



  • Polofreak schrieb:

    estartu_de schrieb:

    Polofreak, du darfst die Bilder auch gerne bei uns hochladen. 😉

    hm irgendwo hier im Forum stand des wo und wie ich das machen kann, und wie die Bildtags gehen. Oder?

    Guck in die Anleitung, alleroberster Post: http://www.c-plusplus.net/forum/viewtopic-var-t-is-121848.html

    Wenn du nur mit Java vergleichen willst ist das okay - du bist der Autor und es war nur ein Vorschlag von mir. 🙂



  • okay hab es gelesen weiß aber nicht ob ich hier weiter schreiben soll, oder ob ich nen neuen THread starten sollte, aber egal ich fang mal hier an und wenn ich einen neuen hätte anfangen sollen, dann mach ich das dann. Wenn ich dennoch Fehler machen sollte, dann bitte gleich sagen.



  • Einführung in C# .Net:

    1.Übersicht
    2.Typen
    3.Ausdrücke (Expressions)
    4.Deklarationen
    5.Anweisungen(Statements)
    6.Klassen und Strukturen

    1. Übersicht:

    In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.

    C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
    ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neu

    Ähnlichkeiten zu Java:
    •Objectorientierung (einfach Vererbung)
    •Interfaces
    •Exceptions
    •Threads
    •Namespaces (wie Packages)
    •Garbage Collection
    •Reflection
    •dynamisches Code-loading
    •...

    Ähnlichkeiten zu C++:
    •überladen (von Operator)
    •Pointer Arithmetic in unsicherem (unsafe) Code
    •syntaktische Details

    wirklich neu:
    •Referenz und output Parameter
    •Objekte auf dem Stack (structs)
    •Rectangular Arrays
    •Enumerationen
    •Unified type system
    •goto
    •Versionierung

    Syntaktische Schönheiten:
    •Delegates
    •Indexers
    •Operator overloading
    •foreach Statements
    •Boxing/unboxing
    •Attribute
    •...

    2. Typen (Types)

    Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.

    Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)

    Festwert-Typen:
    Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:

    int i = 0;
    // oder
    bool b = false;
    // oder
    string s = '\0'
    

    Referenz-Typen:
    Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.

    Primitive Datentypen:
    zu den primitiven Datentypen gehören

    primitiver Typ       Long Form        in Java        Range
    
    sbyte               System.SByte     byte           -128 .. 127
    byte                System.Byte      ---            0..255
    short               System.Int16     short          -32768 .. 32767
    ushort              System.UInt16    ---            0 .. 65535
    int                 System.Int32     int            -2147483648 .. 2147483647
    uint                System.UInt32    ---            0 .. 4294967295
    long                System.Int64     long           -2[h]63[/h].. 2[h]63[/h]-1
    ulong               System.UInt64    ---            0 .. 2[h]64[/h]-1
    float               System.Single    float          ±1.5E-45 .. ±3.4E38(32 Bit)
    double              System.Double    double         ±5E-324 .. ±1.7E308(64 Bit)
    decimal             System.Decimal   ---            ±1E-28 .. ±7.9E28 (128 Bit)
    bool                System.Boolean   boolean        true,false
    char                System.Char      char           Unicodecharacter
    

    TODO: Kompatibilität unter den Typen
    Enums
    Tabelle mit C/C++ erweitern

    heute abend gehts weiter 😉



  • Polofreak schrieb:

    okay hab es gelesen weiß aber nicht ob ich hier weiter schreiben soll, oder ob ich nen neuen THread starten sollte, aber egal ich fang mal hier an und wenn ich einen neuen hätte anfangen sollen, dann mach ich das dann. Wenn ich dennoch Fehler machen sollte, dann bitte gleich sagen.

    Bitte hier weiterschreiben, bis der Artikel veröffentlichungsfertig ist. 🙂



  • ok ich schreib heute abend wieder ein wenig danke für deinen support während meines ersten Artikels.



  • Einführung in C# .Net:

    1.Übersicht
    2.Typen
    3.Ausdrücke (Expressions)
    4.Deklarationen
    5.Anweisungen(Statements)
    6.Klassen und Strukturen

    1. Übersicht:

    In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.

    C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
    ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neu

    Ähnlichkeiten zu Java:
    •Objectorientierung (einfach Vererbung)
    •Interfaces
    •Exceptions
    •Threads
    •Namespaces (wie Packages)
    •Garbage Collection
    •Reflection
    •dynamisches Code-loading
    •...

    Ähnlichkeiten zu C++:
    •überladen (von Operator)
    •Pointer Arithmetic in unsicherem (unsafe) Code
    •syntaktische Details

    wirklich neu:
    •Referenz und output Parameter
    •Objekte auf dem Stack (structs)
    •Rectangular Arrays
    •Enumerationen
    •Unified type system
    •goto
    •Versionierung

    Syntaktische Schönheiten:
    •Delegates
    •Indexers
    •Operator overloading
    •foreach Statements
    •Boxing/unboxing
    •Attribute
    •...

    2. Typen (Types)

    Primitive Datentypen:
    zu den primitiven Datentypen gehören

    primitiver Typ     Long Form        in Java        Range
    
    sbyte               System.SByte     byte           -128 .. 127
    byte                System.Byte      ---            0..255
    short               System.Int16     short          -32768 .. 32767
    ushort              System.UInt16    ---            0 .. 65535
    int                 System.Int32     int            -2147483648 .. 2147483647
    uint                System.UInt32    ---            0 .. 4294967295
    long                System.Int64     long           -2[h]63[/h].. 2[h]63[/h]-1
    ulong               System.UInt64    ---            0 .. 2[h]64[/h]-1
    float               System.Single    float          ±1.5E-45 .. ±3.4E38(32 Bit)
    double              System.Double    double         ±5E-324 .. ±1.7E308(64 Bit)
    decimal             System.Decimal   ---            ±1E-28 .. ±7.9E28 (128 Bit)
    bool                System.Boolean   boolean        true,false
    char                System.Char      char           Unicodecharacter
    

    Kompatibilität unter den Typen

    Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.

    Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)

    Festwert-Typen:
    Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:

    int n = 0;
    // oder
    bool b = false;
    // oder
    string s = '\0'
    
    //z.B.:
    int i = 99;
    int j = i;
    

    Referenz-Typen:
    Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.

    string s = "cool";
    string s1 = s;
    

    TODO:
    Tabelle mit C/C++ erweitern

    heute leider nicht all zu viel geschafft, vielleicht wirds nächstmal wieder mehr 🙂



  • hatte in letzter Zeit viel zu tun mit einem kleinen Projekt zu Netzwerkprogrammierung in C# .Net, deshalb bin ich kaum zum Artikel gekomen. Wollte einfach nur melden dass ich es nicht vergessen habe, sondern dass ich momentan einfach nicht dazu gekommen bin. Ich denke das ein weiterer TEil diese Woche fertig wird. aber steter Tropfen hölt den Stein.
    bis demnächst



  • Einführung in C# .Net:

    1.Übersicht
    2.Typen
    3.Enumerationen (Enums)
    4.Boxing & Unboxing
    5.Overflow Checks
    6.Deklarationen
    7.Anweisungen(Statements)
    8.Klassen und Strukturen

    1. Übersicht:

    In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.

    C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
    ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neu

    Ähnlichkeiten zu Java:
    •Objectorientierung (einfach Vererbung)
    •Interfaces
    •Exceptions
    •Threads
    •Namespaces (wie Packages)
    •Garbage Collection
    •Reflection
    •dynamisches Code-loading
    •...

    Ähnlichkeiten zu C++:
    •überladen (von Operator)
    •Pointer Arithmetic in unsicherem (unsafe) Code
    •syntaktische Details

    wirklich neu:
    •Referenz und output Parameter
    •Objekte auf dem Stack (structs)
    •Rectangular Arrays
    •Enumerationen
    •Unified type system
    •goto
    •Versionierung

    Syntaktische Schönheiten:
    •Delegates
    •Indexers
    •Operator overloading
    •foreach Statements
    •Boxing/unboxing
    •Attribute
    •...

    2. Typen (Types)

    Primitive Datentypen:
    zu den primitiven Datentypen gehören

    primitiver Typ     Long Form        in Java        Range
    
    sbyte               System.SByte     byte           -128 .. 127
    byte                System.Byte      ---            0..255
    short               System.Int16     short          -32768 .. 32767
    ushort              System.UInt16    ---            0 .. 65535
    int                 System.Int32     int            -2147483648 .. 2147483647
    uint                System.UInt32    ---            0 .. 4294967295
    long                System.Int64     long           -2[h]63[/h].. 2[h]63[/h]-1
    ulong               System.UInt64    ---            0 .. 2[h]64[/h]-1
    float               System.Single    float          ±1.5E-45 .. ±3.4E38(32 Bit)
    double              System.Double    double         ±5E-324 .. ±1.7E308(64 Bit)
    decimal             System.Decimal   ---            ±1E-28 .. ±7.9E28 (128 Bit)
    bool                System.Boolean   boolean        true,false
    char                System.Char      char           Unicodecharacter
    

    Kompatibilität unter den Typen

    Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.

    Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)

    Festwert-Typen:
    Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:

    int n = 0;
    // oder
    bool b = false;
    // oder
    string s = '\0'
    
    //z.B.:
    int i = 99;
    int j = i;
    

    Referenz-Typen:
    Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.

    string s = "cool";
    string s1 = s;
    

    3. Enumerationen

    Liste von Namenhaften Konstanten deren Deklaration direkt im Namespace geschieht.

    Beispiel:

    enum Farbe{rot, gelb, blau, gruen, lila} // hier sind die Variablen automatisch 0, 1, 2...
    enum WochenTage_mit_d{dienstag=2,donnerstag=4}
    enum WochenTage_mit_d:byte{dienstag=2,donnerstag=4}
    
    //Verwendung:
    Farbe c = Farbe.blau;
    WochenTage_mit_d WTmd = WochenTage_mit_d.dienstag | WochenTage_mit_d.donnerstag;
    if ((WochenTage_mit_d.dienstag & WTmd) != 0) 
    Console.WriteLine("Wochentag ist mit D!");
    

    Was kann man mit Enumerationen machen?
    Die Operatoren sind:
    Vergleichsoperatoren ==; <=; >=; <; >

    if(c == Farbe.blau)//...
    if(c > Farbe.gelb && c < Farbe.lila)//...
    //weitere sind +; -; ++; --;
    c = c+2;
    c--;
    //oder gleich
    c++;
    // dann noch &; |;  ~
    if ((c & Farbe.rot) == 0)// ...
    c = c | Farbe.blau;
    c = ~ Farbe.rot;
    

    ⚠ Der Compiler prüft nicht ob der Enum-Typ einen gültigen Wert annimt.

    Enumerationen können Integern nur nach explizitem Cast zugewiesen werden!
    Enumerationen erben vom Typ Object somit: Equals, ToString, ...
    Die Klasse System.Enum unterstützt Operationen wie GetName, Format, GetValues, ...

    ??. Felder (Arrays)

    Eindimmensionale Arrays:

    int[] a = new int[3];
    

    Mehrdimensionale Felder:
    "ausgefranzte":

    int[][] ausgefr = new int[5][];
    ausgefr[0] = new int[3];
    a[1] = new int[4];
    

    solche Felder sind nicht sehr schnell und brauchen mehr Speicher als
    rechteckige Felder:

    int[,] re = new int[2, 3];
    

    hier sind die Zugriffe effizienter und die Felder sind kompakter

    4. Boxing und Unboxing

    Boxing ist das Stichwort zur Umwandlung von (Structs, Enums oder Integern ...) in ein Objekt. Objekten können somit andere Typen zugewiesen werden. Das könnte dann so aussehen:

    int nZahl=5;
    object obj = nZahl;
    

    Unboxing ist geau das Gegenteil; aus einem Objekt ein Werttyp machen. Das sieht dann so aus:

    int Zahl_aus_obj = (int)obj;
    

    und schon hat man aus dem Objekt ein Integer gemacht.

    5.Overflow Checks
    Standardmäßig werden Overflows nicht abgefangen, somit kann es zu unerwünschtem Verhalten kommen. Da es aber auch sein kann, dass man mit Overflows arbeitet (Zufallszahlen) kann man manuell Overflows abfangen.

    int grosse_Zahl = 999999;
    grosse_Zahl *= grosse_Zahl; 
    // ergibt nicht mathematisch richtiges Ergebnis aber auch keinen Fehler
    
    // wenn man es abfangen will sollte man es besser so machen:
    grosse_Zahl = checked(grosse_Zahl*grosse_Zahl);
    //wirft OverflowException
    

    man kann aber nicht nur einzelne Operationen mit checked prüfen, man kann auch ganze Blöcke prüfen

    checked{
    grosse_Zahl *= grosse_Zahl; 
    }
    //wirft ebenso Overflow Exception
    

    Wenn man allerdings das komplette Assemblie geprüft ausführen will kann man checked als Kompilerfunktion angeben.
    csc /checkedTest.cs



  • Wird ja langsam 🙂

    Polofreak schrieb:

    Einführung in C# .Net:

    Referenz-Typen:
    Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.

    string s = "cool";
    string s1 = s;
    

    Erklärung soweit richtig, aber Beispiel extrem ungünstig gewählt weil bei string so einiges anders läuft als bei normalen Objekten 🙂

    string x = "cool";
                string x2 = x;
                MessageBox.Show(x2);
                x = "Hallo";
                MessageBox.Show(x2);
    

    Was gibts als Ausgabe? Richtig, 2x cool 🙂 Liegt an dem überladen = Operator bei String. Genauso wie == bei String die Werte statt die Referenz vergleicht wie bei anderen Objekten. Es ist einfach der natürlichen Benutzungsweise von string als Wert angepasst. Nimm lieber irgend nen beliebiges anderes Objekt.



  • Nabend,

    bissle pingelig, aber was solls ;).

    Bei 'Kompatibilität unter den Typen' die rote Unterstreichung (Word Rechtschreib-
    pruefung? 🙂 ) wegmachen. Die stoert doch sehr ;).

    mfg
    v R



  • Hat nichts mit pingelig zutun, sondern ist einfach Prinzip!



  • Was ich noch vergessen hatte:

    Der Name "Festwerttyp" ist meiner Meinung nach auch blöd gewählt. Im englischen heißen die value types, also sollte man auch im Deutschen einfach nur Wertetypen sagen, weil mit fest haben die nichts zu tun. Festwert hört sich für mich eher nach Konstanten an.

    Und dann ist mir eben aufgefallen das du string ja bei beiden Arten von Typen als Beispiel verwendest. Einmal die Zuweisung wie bei einem Wertetyp und dann das Verhalten wie von Referenztypen, das ja aber nicht ganz funktioniert bei strings 😉 Vielleicht sollte man das ein wenig klarstellen, das strings zwar wirklich Referenztypen sind, aber sich eher wie Wertetypen verhalten.



  • Wow bin es gar nicht gewohnt soviel feedback zu bekommen, aber ich find es Klasse, so weiß ich 1. dass das auch jemand liest, und zweitens kann es so nur besser werden, also als aller erstes mal vielen Dank fürs feedback. So nun zum Feedback selber Das mit den roten Wellen Linien ist mir auch schon aufgefallen, werde ich auf jeden Fall noch korrigieren, ich glaub ich muss es aber nochmal neu schreiben, drum mach ich es jetzt grad nicht auf die Schnelle.
    Das mit den Festwerttypen hasste schon recht, hab glaub auch gelegentlich Werttypen geschrieben werde ich gleich noch überarbeiten. Das mit dem String muss ich mir nochmal in Ruhe Anschauen, mit dem was du da geschrieben hast. Wenn ich es nochmal durchgegangen bín melde ich mich nochmal.



  • Einführung in C# .Net:

    1.Übersicht
    2.Typen
    3.Enumerationen (Enums)
    4.Boxing & Unboxing
    5.Overflow Checks
    6.Deklarationen
    7.Anweisungen(Statements)
    8.Klassen und Strukturen

    1. Übersicht:

    In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.

    C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
    ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neu

    Ähnlichkeiten zu Java:
    •Objectorientierung (einfach Vererbung)
    •Interfaces
    •Exceptions
    •Threads
    •Namespaces (wie Packages)
    •Garbage Collection
    •Reflection
    •dynamisches Code-loading
    •...

    Ähnlichkeiten zu C++:
    •überladen (von Operator)
    •Pointer Arithmetic in unsicherem (unsafe) Code
    •syntaktische Details

    wirklich neu:
    •Referenz und output Parameter
    •Objekte auf dem Stack (structs)
    •Rectangular Arrays
    •Enumerationen
    •Unified type system
    •goto
    •Versionierung

    Syntaktische Schönheiten:
    •Delegates
    •Indexers
    •Operator overloading
    •foreach Statements
    •Boxing/unboxing
    •Attribute
    •...

    2. Typen (Types)

    Primitive Datentypen:
    zu den primitiven Datentypen gehören

    primitiver Typ     Long Form        in Java        Range
    
    sbyte               System.SByte     byte           -128 .. 127
    byte                System.Byte      ---            0..255
    short               System.Int16     short          -32768 .. 32767
    ushort              System.UInt16    ---            0 .. 65535
    int                 System.Int32     int            -2147483648 .. 2147483647
    uint                System.UInt32    ---            0 .. 4294967295
    long                System.Int64     long           -2[h]63[/h].. 2[h]63[/h]-1
    ulong               System.UInt64    ---            0 .. 2[h]64[/h]-1
    float               System.Single    float          ±1.5E-45 .. ±3.4E38(32 Bit)
    double              System.Double    double         ±5E-324 .. ±1.7E308(64 Bit)
    decimal             System.Decimal   ---            ±1E-28 .. ±7.9E28 (128 Bit)
    bool                System.Boolean   boolean        true,false
    char                System.Char      char           Unicodecharacter
    

    Kompatibilität unter den Typen

    Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.

    Unterschied zwischen Wert-Typen(value Types) und Referenz-Typen (reference-Types)

    Wert-Typen:
    Wert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Werttypen kann wie folgt aussehen:

    int n = 0;
    // oder
    bool b = false;
    // oder
    string s = '\0'
    
    //z.B.:
    int i = 99;
    int j = i;
    

    Referenz-Typen:
    Im Gegenteil zu Wert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.

    string s = "cool";
    string s1 = s;
    

    3. Enumerationen

    Liste von Namenhaften Konstanten deren Deklaration direkt im Namespace geschieht.

    Beispiel:

    enum Farbe{rot, gelb, blau, gruen, lila} // hier sind die Variablen automatisch 0, 1, 2...
    enum WochenTage_mit_d{dienstag=2,donnerstag=4}
    enum WochenTage_mit_d:byte{dienstag=2,donnerstag=4}
    
    //Verwendung:
    Farbe c = Farbe.blau;
    WochenTage_mit_d WTmd = WochenTage_mit_d.dienstag | WochenTage_mit_d.donnerstag;
    if ((WochenTage_mit_d.dienstag & WTmd) != 0) 
    Console.WriteLine("Wochentag ist mit D!");
    

    Was kann man mit Enumerationen machen?
    Die Operatoren sind:
    Vergleichsoperatoren ==; <=; >=; <; >

    if(c == Farbe.blau)//...
    if(c > Farbe.gelb && c < Farbe.lila)//...
    //weitere sind +; -; ++; --;
    c = c+2;
    c--;
    //oder gleich
    c++;
    // dann noch &; |;  ~
    if ((c & Farbe.rot) == 0)// ...
    c = c | Farbe.blau;
    c = ~ Farbe.rot;
    

    ⚠ Der Compiler prüft nicht ob der Enum-Typ einen gültigen Wert annimt.

    Enumerationen können Integern nur nach explizitem Cast zugewiesen werden!
    Enumerationen erben vom Typ Object somit: Equals, ToString, ...
    Die Klasse System.Enum unterstützt Operationen wie GetName, Format, GetValues, ...

    ??. Felder (Arrays)

    Eindimmensionale Arrays:

    int[] a = new int[3];
    

    Mehrdimensionale Felder:
    "ausgefranzte":

    int[][] ausgefr = new int[5][];
    ausgefr[0] = new int[3];
    a[1] = new int[4];
    

    solche Felder sind nicht sehr schnell und brauchen mehr Speicher als
    rechteckige Felder:

    int[,] re = new int[2, 3];
    

    hier sind die Zugriffe effizienter und die Felder sind kompakter

    4. Boxing und Unboxing

    Boxing ist das Stichwort zur Umwandlung von (Structs, Enums oder Integern ...) in ein Objekt. Objekten können somit andere Typen zugewiesen werden. Das könnte dann so aussehen:

    int nZahl=5;
    object obj = nZahl;
    

    Unboxing ist geau das Gegenteil; aus einem Objekt ein Werttyp machen. Das sieht dann so aus:

    int Zahl_aus_obj = (int)obj;
    

    und schon hat man aus dem Objekt ein Integer gemacht.

    5.Overflow Checks
    Standardmäßig werden Overflows nicht abgefangen, somit kann es zu unerwünschtem Verhalten kommen. Da es aber auch sein kann, dass man mit Overflows arbeitet (Zufallszahlen) kann man manuell Overflows abfangen.

    int grosse_Zahl = 999999;
    grosse_Zahl *= grosse_Zahl; 
    // ergibt nicht mathematisch richtiges Ergebnis aber auch keinen Fehler
    
    // wenn man es abfangen will sollte man es besser so machen:
    grosse_Zahl = checked(grosse_Zahl*grosse_Zahl);
    //wirft OverflowException
    

    man kann aber nicht nur einzelne Operationen mit checked prüfen, man kann auch ganze Blöcke prüfen

    checked{
    grosse_Zahl *= grosse_Zahl; 
    }
    //wirft ebenso Overflow Exception
    

    Wenn man allerdings das komplette Assemblie geprüft ausführen will kann man checked als Kompilerfunktion angeben.
    csc /checkedTest.cs

    6. Deklarationen
    Folgende Grafik soll zeigen wie Dateneinheiten deklariert werden können.

    Variablen sind in niederen Deklarationsräumen verfügbar und es dürfen somit keine Variablennamen aus höheren verwendet werden, da Namen nicht mehrfach im gleichen Deklarartionsraum benutzt werden dürfen. Zwei gleichnamige Namensräumen in unterschiedlichen Files führen zu einem Deklararionsraum. Dies hat zur Folge, dass Variablen auch in diesen anderen Files verfügbar sind. Andere Namespaces müssen importiert oder spezifiziert werden. So benutzt man z.B. meist

    using System;
    

    7. Anweisungen Statements
    Die gelisteten Ausdrücke dürften aus anderen Programmiersprachen bekannt sein, deshalb sind sie nur sehr karg kommentiert. Es soll mehr eine Beispielesammlung sein.

    //Zuweisungen
    z += 58*R;
    //Methodenaufrufe
    string str = "h.e.l.l.o";
    string[] geteilt = s.Split('.');
    s = String.Join(" ",geteilt);
    //if-Abfragen
    if(x>=0 && x<=10)
        x++;
    else if (x>=20 && x<=30)
        x +=5;
    else
        x=0;
    //switch
    switch(Font)
    {
        case "Überschrift 1": "Heading 1":
            Fontsize = 24;
            break;
        case "Überschrift 2": "Heading 2":
            Fontsize = 20;
            break;
        case null:
            Console.WriteLine("Kein Schema angegeben");
            break;
        default:
            Console.WriteLine("Kenne die Grösse nicht");
            break;
    }
    //auch gotos sind in switch-Anweisungen möglich
    
    //Schleifen
    while (i>n)
    {
        sum+=i;
        i--;
    }
    do
    {
        sum += a[i];
        i++;
    }
    while (i<n);
    
    for (int i=0; i<n; i++)
    sum+=i;
    // Schleife für Arrays (z.B. auch Strings)
    int[] x = {1,2,3,4,5,6,7,8,9};
    foreach (int z in x) sum +=z;
    

    TODO: Tabelle Vergleich mit C++
    Referenztypen mit String anschauen



  • Talla schrieb:

    ...
    Und dann ist mir eben aufgefallen das du string ja bei beiden Arten von Typen als Beispiel verwendest. Einmal die Zuweisung wie bei einem Wertetyp und dann das Verhalten wie von Referenztypen, das ja aber nicht ganz funktioniert bei strings 😉 Vielleicht sollte man das ein wenig klarstellen, das strings zwar wirklich Referenztypen sind, aber sich eher wie Wertetypen verhalten.

    Das versteh ich nicht! Welchen Typ würdest du denn nehmen um die Referenztypen zu demonstrieren? und das Beispiel funktioniert so!


Anmelden zum Antworten