[X] Einführung in C# .Net



  • Polofreak schrieb:

    evilissimo schrieb:

    ... Auch die Sprachähnlichkeit (vergleich) würde ich generell rauslassen das sich jemand auf die Füße getreten fühlen könnte und das dann nur in nem Flame ausartet...

    noch mehr der Meinung dann nehm ich es raus!

    *meld*

    ohne new kann es schon sein, dass nur 0en drin stehen, aber es kann auch Müll drin stehen, weil sie nicht initialisiert werden! Oder seh ich das falsch??

    http://www.galileocomputing.de/openbook/csharp/kap09.htm#t23



  • Wieso Namespaces und C++??

    Weil das Prinzip der Namespaces, so wie es in C# verwendet wird, wesentlich mehr Ähnlichkeit hat mit dem von C++, als mit irgendwelchen Java-Packages ...



  • immernoch bleibt die Frage offen wo es in C++ Namespaces gibt?

    Ich werde den Vergleich raus nehmen aber interessieren würde es mich dennoch



  • Polofreak schrieb:

    immernoch bleibt die Frage offen wo es in C++ Namespaces gibt?

    Wie bitte?

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Hello World";
    }
    


  • Polofreak schrieb:

    immernoch bleibt die Frage offen wo es in C++ Namespaces gibt?

    Du willst uns verscheissern, oder?! Es kann sich nur um einen Scherz handeln...

    namespace artchi
    {
       class MyClass {
       };
    }
    
    using namespace artchi;
    MyClass c;
    


  • *rofl* 🤡



  • *gg* 😃 *gg*
    tut mir leid ich war wohl etwas neben mir gestanden! 😉 Wenn ich mir das grad anschau, muss ich mir ja voll selbst an den Kopf langen!
    Hab mich glaub selbst auch verscheissert (entweder war ich besoffen oder hab gepennt also sowas! 🙄 ) Joa aber die Namespaces in C# sind doch ähnlicher den usings in Java dachte ich, lieg ich da auch falsch? Achso ich nehms ja eh raus, drum brauch man das ja eigentlich gar nicht diskutieren.

    Sonst noch Anmerkungen??



  • Einführung in C# .Net

    1.Übersicht
    2.Typen
    3.Enumerationen (Enums)
    4.Felder (arrays)
    5.Boxing & Unboxing
    6.Overflow Checks
    7.Deklarationen
    8.Anweisungen(Statements)
    9.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.

    wirklich neu:
    •Referenz und output Parameter
    •Rectangular Arrays
    •Unified type system
    •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;
    
    //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, ...

    4 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

    5 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.

    6 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

    7 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;
    

    8 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++;
    }
    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;
    

    9 Klassen und Strukturen

    - Klassen:

    •Objekte liegen am Heap (Referenztypen)
    •Erzeugung von Objekten mit [i]new*

    Stack s = new Stack(255);
    

    •können erben, vererben und Interfaces implementieren (alle Klassen von object abgeleitet)
    •dürfen Destruktor besitzen

    Konstruktoren:

    Konstruktor-Aufruf erzeugt neues Objekt am Heap und initialisiert es
    •überladbar
    •this ruft anderen Konstruktor auf (im Kopf des Konstruktors)
    •erst Initialisierungen dann Konstruktoren
    •kein Konstruktor => parameterloser Default-Konstruktor (nur dann)

    - Strukturen:

    •Objekte liegen am Stack (Werttypen)
    •Können mit new erzeugt werden (ohne new sind Felder nicht initialisiert)
    •Felder dürfen bei der Deklaration nicht initialisiert werden

    struct rechteck
    {
        int laenge = 0;// Compiler-Fehler
        int breite;//OK
        ...
    }
    

    •Konstruktoren müssen min. einen Parameter besitzen
    •können Interfaces implementieren (aber nicht erben oder vererben)
    •dürfen keinen Destruktor besitzen

    Konstruktoren:

    Konstruktor-Aufruf erzeugt neues Objekt am Stack!
    •haben immer parameterlosen Default-Konstruktor
    •=> keinen eingenen parameterlosen Konstruktor anlegen

    ➡ Es gibt keine anonymen Klassen (wie in Java)
    ➡ Es gibt keine Templates (wie in C++)

    ===================================
    Sind so die Leute vom Thematischen Feedback einverstanden?
    Wenn ja gehe ich mal einen Step weiter



  • Jo, wenn thematisch nichts mehr anliegt, würde ich sagen, du setzt ihn auf [R], vllt. kriegen wir ihn noch in dieser Runde raus.

    MfG

    GPC



  • ups sorry hatte ich übersehen! 🙄

    jo mach ich aber es scheint schon fast zu spät zu sein. Mal schauen.



  • Wenn hier bis morgen früh eine korrigierte Version steht, wecke ich doch und veröffentliche dann doch später. 🙂



  • na mir ists egal!
    Aber was mir noch einfällt, ein Literaturhinweis wäre vielleicht noch ganz gut!!



  • Na, dann mach doch noch. 😉



  • hm hab das Buch leider grad nicht da, welches ich gerne drin hätte, mach es heute Abend wenn ich zu Hause bin! Ich hoffe das reicht noch 😉



  • Entweder guckste noch schnell bei Amazon, ob du es wieder erkennst... oder du vertippst dich beim Abschreiben eben nicht. 😃

    ...klar reicht das.



  • Ich schau mal, allerdings, weißt du wie weit die anderen Artikel sind? Wird da min einer auf nächsten Termin fertig?? Weil wenn nein dann ist es besser jedes mal einen wie jetzt mit druck noch nen zweiten.



  • CStolls zweiter Teil der STL-Serie geht dieses mal sicher raus. Deiner dazu wäre nicht schlecht.

    Beim nächsten mal bin ich mit den Autotools sicher dabei und vermutlich geht der Socket-Artikel mit raus. Der macht schnell große Fortschritte.

    MfG

    GPC



  • Und der 3. Teil von CStolls Serie ist ja definitiv zu nächstem Monat fertig. 😉
    Aber wie gesagt: Es wäre schön, wenn es Morgen mit rausgeht... wenn du kein gutes Gefühl dabei hast, warten wir besser. 🙂



  • bis jetzt hat sich noch kein Rechtschreiber gemeldet.
    Den Litheraturhinweis krieg ich schon noch hin das ist nicht das Problem



  • Polofreak schrieb:

    bis jetzt hat sich noch kein Rechtschreiber gemeldet

    easy going, heut schaut mit Sicherheit noch einer vorbei.


Anmelden zum Antworten