[ANFÄNGER] C# - Projekt zum Start der Programmierung

Es gibt 153 Antworten in diesem Thema. Der letzte Beitrag () ist von AtomiX.

    Doch ich habe schon angefangen.
    Aktuell bin ich im Prakti und mache dort ein wenig PHP und zu Hause mach ich dann C# Variablen, Schleifen, Primitive Datentypen, Bedingungen(IfElse) usw...

    Außerdem fange ich bei PHP jetzt halt ein wenig schon mit OOP an. ;)

    #UPDATE
    Gibt es irgendwelche wichtigen Klassen die man am Anfang kennen sollte?
    Weil ich mich jetzt ein wenig mit der Klassenbibliothek auseinander setzen möchte.
    Bzw. Klassen die relativ oft verwendet werden.

    #100 Antwort :D
    Mit Freundlichen Grüßen
    AtomiX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AtomiX“ ()

    string, Integer, Double, DateTime, Timespan, List(Of T), Dictionary(Of TKey, TValue), FileInfo, DirectoryInfo, Stream, StreamReader, StreamWriter

    aber kannst du den ObjectBrowser denn überhaupt schon bedienen? Weil wie soll sonst das sich mitte Klassen auseinandersetzen aussehen?
    Danke für deine Aufzählung.

    ErfinderDesRades schrieb:

    aber kannst du den ObjectBrowser denn überhaupt schon bedienen? Weil wie soll sonst das sich mitte Klassen auseinandersetzen aussehen?


    Ich wollte mir die einfach mal angucken und schon ein wenig ein prägen.

    Was mir auch noch aufgefallen ist, bei den lernen bzw. durchlesen der Dokus bzw. Handbücher, dass da manchmal viele Sachen im Quellcode stehen, dass noch nicht mal erläutert wurde was das bedeutet :
    Bsp: hier ---> : docs.microsoft.com/de-de/dotne…ramming-guide/types/index
    Da z.b. dieser Code :

    C#-Quellcode

    1. int[] source = { 0, 1, 2, 3, 4, 5 };

    Da weiß ich zwar das es ein Array ist, aber das wird nirgendswo erläuter/erklärt
    Aber z.B. das hier weiß ich auch nicht was das bedeuten soll:

    C#-Quellcode

    1. var query = from item in source
    2. where item <= limit
    3. select item;


    Oder gibt es da eine bestimmte Reihenfolge wie es dort gedacht ist sich da systemmatisch anzugucken?
    Wenn ja lasst es mir bitte mal zu kommen :D
    Mit Freundlichen Grüßen
    AtomiX
    Logischerweise hat das eine Reihenfolge, sonst müsstest du ja mit OOP anfangen ohne zu wissen, was eine Funktion ist. Generell kannst du Dinge die du nicht verstehst, weil sie noch nicht erörtert wurden, überspringen oder hier nachfragen.

    Wichtige Klassen sind eben die, die oben aufgelistet wurden, wobei genau genommen Integer, Double etc structs sind (d.h Wertetypen statt Referenztypen).
    Zum Thema IDE, ObjectBrowser etc kann ich das empfehlen: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Es sei gesagt, dass manche mit MSDN besser zurechtkommen. Was dir besser liegt wirst du merken.

    Das wichtigste ist der ObjectBrowser. Sonst weiß ich nicht, was du mit

    AtomiX schrieb:

    einfach mal angucken
    meinen könntest.

    Der OB ist das Tool zum Angucken der Klassen (-Bibliotheken - es sind mehrere)
    In meim Lehrplan ist auch auf ein Video dazu verlinkt.

    Jo, und vieles ist einfach nicht erläutert - man stösst drauf, und macht sich schlau.
    Das mit dem Array - vlt. hilft dir Grundlagen: Fachbegriffe ein bischen (trotz dasses vb ist) - ist übrigens auch in meim Plan verlinkt.
    Jo, die query ist mit Linq gemacht, und Linq ist was fortgeschrittenes. Ein Buch, was mit sowas bereits inne ersten 3 Kapitel kommt, kannste eiglich wegschmeissen.

    Aber normalerweise bauen Bücher sinnvoll und systematisch auf - deswegen wird sowas ja gelegentlich empfohlen.
    Weil alle Foren und Tuts und Videos im INet schwächeln mehr oder weniger an diesem Punkt: Systematischer Aufbau der LernInhalte.

    ErfinderDesRades schrieb:

    Aber normalerweise bauen Bücher sinnvoll und systematisch auf - deswegen wird sowas ja gelegentlich empfohlen.
    Weil alle Foren und Tuts und Videos im INet schwächeln mehr oder weniger an diesem Punkt: Systematischer Aufbau der LernInhalte.


    Eben darum die Empfehlung ein Buch zu kaufen. Wird damit nochmal bestätigt:-)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Jup

    Aber ich bin mir immernoch unsicher welches Buch, weil die Bücher sind ja nicht gerade billig:
    Ob nur das : amazon.de/Einstieg-Visual-Stud…ywords=c%23+programmieren
    oder das : https://www.amazon.de/Schr%C3%B6dinger-programmiert-etwas-andere-Fachbuch/dp/3836223813/ref=cm_cr_arp_d_product_top?ie=UTF8

    Weil ich meine ja ihr kennt euch besser aus was man können sollte(ich weiß das wurde schon aufgezählt ;) )
    Aber welches Buch würdet ihr mir empfehlen bzw. welches Buch ist am sinnvollsten für den Anfang?
    Mit Freundlichen Grüßen
    AtomiX
    Schrödinger programmiert ist mir persönlich zu viel gezeichnet und lenkt vom eigentlichen Inhalt ab, das andere Buch kenne ich nicht.
    Meine Empfehlung: amazon.de/C-Players-Guide-3rd/…ywords=c%23+players+guide
    Das Buch ist gut strukturiert, die Basics sind in Reihenfolge und die Advanced Topics kannst du in eigener Reihenfolge durchgehen. Ich gebe dir mal ein grobes Inhaltsverzeichnis, obs dir gefällt siehst du dann.

    Part 1:
    - Installation of Visual Studio
    - Hello World

    Part 2 (Basics):
    - Variables, Type-system
    - Decision Making (If/Else, switch)
    - Looping
    - Arrays
    - Enumerations
    - Methods
    - Value and Reference Types

    Part 3 (OOP):
    - Own Classes
    - Properties
    - Structs
    - Inheritance
    - Polymorphism, Virtual Methods, Abstract Class/Methods
    - Interfaces
    - Generics

    Part 4 (Advanced Topics):
    - Namespaces
    - Methods revisited (ref/out, param, optional parameters)
    - Readin/Writing Files
    - Error Handling
    - Pattern Matches
    - Delegates
    - Events
    - Operator overloading
    - Indexers
    - Extension Methods
    - Lambda Expression
    - Query Expression
    - Threads
    - Asynchronous Programming
    - Dynamic objects
    - Unsafe code (pointer etc)
    - other C# features

    Part 5:
    Im Prinzip alles was es zu der IDE und zur .NET-Platform zu wissen gibt (d.h Debugging etc)

    In jedem Kapitel sind Übungsaufgaben mit entsprechender Lösung. Das Buch ist für blutige Anfänger geeignet, aber bringt auch für Fortgeschrittene noch sehr viel Inhalt.

    TheVBTutorialsVB schrieb:

    Schrödinger programmiert ist mir persönlich zu viel gezeichnet und lenkt vom eigentlichen Inhalt ab, das andere Buch kenne ich nicht.


    Genau deshalb frage ich ;)
    Ja ich weiß halt nicht wegen dem Buch, aber trotzdem danke für das Ausführliche Inhaltsverzeichnis ;)
    Weil ich würde gerne erstmal ein Buch auf Deutsch lesen, so dass ich wirklich alles verstehe und vielleicht später nochmal auf englisch um vielleicht noch ein wenig mehr zu lernen, weil es detaillierter geschrieben ist. :)

    Wie sehen das die anderen? :)
    Ich hätte gerne ein paar mehr Meinungen, was die anderen von den 3 Büchern halten bzw. welches ihr mir empfehlen würdet
    Mit Freundlichen Grüßen
    AtomiX
    Es handelt sich hier um Meinungen, d.h. sie gehen auseinander. Es gibt auch nicht das beste Buch, da das völlig subjektiv ist.
    Du brauchst ein korrektes Buch, bzw. eine korrekte Lernquelle.
    Allerdings scheinst du bisher auch ohne zurecht zu kommen, warum also nicht diesem Weg folgen, bis du nicht mehr weiter kommst.

    Viele Grüße
    ~blaze~
    Ja ich komme schon relativ gut zurecht.
    Aber es ist halt relativ nervig, wenn da "gefühlt" in jedem 2. Satz irgendwas steht, was ich nicht kenne bzw. ich nicht zuordnen kann.

    Deshalb wollte ich mir am liebsten ein Buch kaufen, in der Hoffnung das es dort alles gut erläutert wird.
    Aus diesem Grund frage ich nach Meinungen.
    Mit Freundlichen Grüßen
    AtomiX
    Wie gesagt, es ist irrelevant, welches Buch du kaufst, solange es die Inhalte korrekt darstellt. Ich habe keins der Bücher gelesen, aber die dir oben empfohlene Literatur wird ja dann hoffentlich das leisten.

    Ich habe es halt auf die Art gelernt, dass ich, sobald ich einen Begriff nicht kannte, ihn nachgeschlagen habe. Das war zwar etwas mühsam, da es teilweise dann schon recht weit in die Materie ging, aber hat definitv zum besseren Verständnis der Sprache beigetragen, nicht nur zum "Wie", sondern vor allem auch zum "Warum".

    Viele Grüße
    ~blaze~
    Ja , ich muss halt gucken, wie ich damit zurecht komme.

    ~blaze~ schrieb:

    Verständnis der Sprache beigetragen, nicht nur zum "Wie", sondern vor allem auch zum "Warum".


    Ja genau das möchte ich auch von allen wissen.
    Was mir aber auch noch wichtig ist : das ich weiß wozu, also wozu das verwendet wird.

    z.B. was ich immer noch nicht verstehe was/wozu/wobei eine Schleife hilft...
    Sieht man durchgehend den Code der da drinnen steht bis zum Punkt

    C#-Quellcode

    1. break;
    Mit Freundlichen Grüßen
    AtomiX
    Schleifen braucht man, um gewisse Instruktionen mehrmals auszuführen (nicht zu verwechseln mit einem Timer: Ein Timer führt Aktionen nach gewissen Intervallen wieder aus, eine Schleife führt ihren Inhalt streng nacheinander aus)

    Es gibt folgende Schleifen:
    - while
    - do-while
    - for
    - forall

    Die while-Schleife führt einen Code aus, solange eine Bedingung zutrifft:

    C#-Quellcode

    1. while(/*Bedingung*/)
    2. //statement

    Der Schleifeninhalt (statement) wird solange ausgeführt, bis die Bedingung nicht mehr zutrifft.
    Zum Beispiel:

    C#-Quellcode

    1. StreamReader s = new StreamReader("...");
    2. List<string> lines = new List<string>();
    3. while (!s.EndOfStream) //solange das Dateiende nicht erreicht wurde
    4. lines.Add(s.ReadLine()); //füge die nächste gelesene Zeile der Liste lines hinzu
    5. sr.Close(); //aufräumen

    Das Verhalten ist quasi recht ähnlich zu System.IO.File.ReadAllLines.

    Ähnlich verhält sich die do-while-Schleife: In ihr wird das gleiche gemacht, aber der enthaltene Code wird mindestens einmal ausgeführt - deshalb steht die Bedingung auch unten:

    C#-Quellcode

    1. do
    2. {
    3. //(I): auszuführende Instruktion
    4. } while (/*(II): Bedingung*/);

    wird zum Ablauf
    - (I)
    - trifft (II) zu, führe (I) aus, wiederhole diesen Schritt

    Zum Beispiel

    C#-Quellcode

    1. int value;
    2. bool isValidInput;
    3. do
    4. {
    5. isValidInput = int.TryParse(InputBox("Bitte Zahl eingeben"), out value);
    6. } while (!isValidInput);

    Die Funktion InputBox soll hier ein Fenster anzeigen, in dem der Benutzer einen beliebigen Text eingeben kann (ist natürlich keine elegante Lösung ;) Besser ist es, wenn man ein eigenes Fenster dafür entwirft, das Falscheingaben bereits von sich aus erkennt). Der eingegebene Text wird dann als string zurückgegeben. Übrigens blockiert InputBox während dem Anzeigen die Ausführung, sodass die Schleife nicht im Hintergrund weitere InputBox-Aufrufe durchführen kann ;).
    Anschließend wird durch int.TryParse überprüft, ob es sich um eine gültige Eingabe handelt. Ist das der Fall, wird das Ergebnis in value abgelegt und in isValidInput wird true abgelegt - ist die Eingabe ungültig, wird in isValidInput false abgelegt.
    Liegt nun in isValidInput true, so ergibt die Negation von isValidInput, !isValidInput, false und die Bedingung der do-while-Schleife ist nicht zutreffend und führt zum Abbruch. Wenn isValidInput false ist, trifft die Bedingung zu, da ja !isValidInput true ergeben muss und der Schleifeninhalt wird erneut ausgeführt.
    Insgesamt wird also der Benutzer solange mit einer Eingabeaufforderung genervt, bis er eine gültige Zahl eingegeben hat.

    Die for-Schleife verwendet man meist wohl so:

    C#-Quellcode

    1. for(int i = 0; i < 100; ++i) /*statement*/

    was heißt: Deklariere die Variable i mit dem Startwert 0 (int i = 0) und führe, solange die Bedingung (i < 100) zutrifft, den Schleifeninhalt (/*statement*/, hier als Kommentar dargestellt) aus. Nach der Ausführung der Schleife wird dann noch die Fortsetzung (++i, d.h. setze i := i+1) ausgeführt.

    Prinzipiell kann eine Schleife aber beliebige Bedingungen aufnehmen, es wäre auch folgendes zulässig:

    C#-Quellcode

    1. var sr = new StreamReader("...");
    2. var l = new List<string>();
    3. for(; !sr.EndOfLine; )
    4. l.Add(sr.ReadLine());
    5. sr.Close

    was dann quasi das Gleiche macht, wie das aus der while-Schleife oben.

    Ein weiteres Beispiel wäre:

    C#-Quellcode

    1. const int count = 100; //die Zahl der Arrayeinträge (wird hier als Konstante angelegt, das muss natürlich nicht so gemacht werden, machte aber hier Sinn)
    2. int[] squares = new int[count]; //wird die i^2 enthalten
    3. for(int i = 0; i < count; i++) //alle Arrayeinträge durchlaufen
    4. squares[i] = i * i; //der i-te Eintrag enthält i * i, was i^2 entspricht


    Die foreach-Schleife kann man dann verwenden, um eine Auflistung von vorne nach hinten zu durchlaufen. Der Fokus liegt hierbei auf den Elementen der Auflistung, d.h. du enthältst nur die Elemente, keine weiteren Informationen:

    C#-Quellcode

    1. string[] = new string[]{"dies", "ist", "ein", "Array"};
    2. foreach(string s in l)
    3. MessageBox.Show(s);

    Die allgemeine Syntax bringt hier recht wenig, daher belasse ich es mal beim Beispiel.

    Außerdem gibt es break und continue. break bricht die Schleife ab, d.h. sie springt an deren Ende, continue beendet die Ausführung des Schleifeninhalts:

    break:

    C#-Quellcode

    1. int x = 2;
    2. while(true) //Immer
    3. {
    4. x *= x; //Multipliziere x mit x und lege das Ergebnis wieder in x ab, d.h. x wird potenziert
    5. if (x >= 100) //Wenn x größer oder gleich 100 ist...
    6. break; //... gehe zu (I)
    7. }
    8. // (I)


    continue:

    C#-Quellcode

    1. int x = 100;
    2. while(x > 0) // (I)
    3. {
    4. continue; //gehe direkt zu (I)
    5. x -= 100; //wird niemals aufgerufen, ist aber hier ein Spezialfall
    6. }

    Mach' dir zu continue am Besten ein paar kleine Testprogramme, damit dir klar wird, wie es funktioniert. Beachte aber, dass es die Übersichtlichkeit ggf. drastisch verschlechtert. Man sollte break und continue stets mit Bedacht wählen. Hier im Code sind sie das übrigens definitv nicht. ;) Nur sind mir nur Beispiele eingefallen, die den Rahmen sprengen.

    Viele Grüße
    ~blaze~
    Wooow so eine lange Antwort :D
    Vielen Dank für deine ausführliche Antwort.

    DU hast das wunderbar erklärt.
    ABER genau das meine ich: da wird z.B. bei irgendwelchen Handbücher mit irgendwelchen Methoden herum geschmissen, die nicht erläutert werden.

    ~blaze~ schrieb:

    !s.EndOfStream


    ~blaze~ schrieb:

    isValidInput


    ~blaze~ schrieb:

    isValidInput = int.TryParse(InputBox("Bitte Zahl eingeben"), out value);


    heißt eigentlich var variable ? also ist das die abkürzung?

    Bsp:

    C#-Quellcode

    1. var x = 100;

    D.h. man müsste das nicht so "umständlich" mit int float doubl usw weiter machen?

    Was ich bei break; und continue nicht gant verstanden habe war das :

    ~blaze~ schrieb:

    break; //... gehe zu (I)


    das mit gehe zu (I) , aber zu welchen "I" ?
    Also was soll das I bedeuten?


    ~blaze~ schrieb:

    i^2 entspricht


    Was soll dieses ^ bedeuten? ;D
    Mit Freundlichen Grüßen
    AtomiX
    Danke für das positive Feedback, das freut mich sehr.

    Es hilft häufig, ähnliche Begriffe zu gruppieren: Ein StreamReader bearbeitet einen Stream. Dateien können als Stream dargestellt werden, d.h. EndOfStream gibt an, ob das Ende der Datei erreicht wurde. Es heißt in diesem Kontext also nur "Ist das Ende der Datei erreicht?".
    Es ist wichtig, dass man diese Begriffe versteht und auch die Zusammenhänge zwischen ihnen. Der Fokus lag beim Beispiel aber auf etwas anderem, es war nicht wichtig, dass du weißt, was genau gemacht wird, sondern viel eher wie der Rahmen, also Schleifen, usw., in einem potenziellen Programm tatsächlich sinnvoll verwendet wird.
    isValidInput ist übrigens eine Variable, die in Zeile 2 deklariert wird. Die Erklärung des Rests ist ja direkt darunter. (war mir nicht sicher, ob das eine Frage war oder eher ein Beispiel für die gute Erklärung)

    var bedeutet, dass der Typ vom Ausdruck rechts inferiert (d.h. es kann aus dem Code rechts davon heregeleitet werden, welchen Typ die Variablen haben soll) wird, d.h.

    C#-Quellcode

    1. var x = 123; //x ist vom Typ int, da 123 vom Typ int ist
    2. var s = "123"; //s ist vom Typ string, da "123" vom Typ string ist
    3. var y = x; //y ist vom Typ int, da x vom Typ int ist
    4. var z = (long)y; //z ist vom Typ long, da (long) eine Konvertierung zu long dargestellt

    Es empfiehlt sich aber, auf die Übersichtlichkeit zu achten. Ich z.B. verwende var nur dann, wenn klar ersichtlich ist, welcher Typ gemeint ist, d.h. z.B. bei var sr = new StreamReader("...");, weil dort klar ist, dass es ein StreamReader ist.

    Nebeninfo: long kann ebenfalls als Ganzzahl verwendet werden, nur ist der Wertebereich anders. Während int Zahlen von -2^31 bis 2^31 - 1 darstellt (das sind genau 2^32 verschiedene Werte, daher spricht man auch von einer 32-bit-Integer, da ein bit immer entweder 0 oder 1 ist), kann long weitaus mehr darstellen, nämlich -2^63 bis 2^63-1.
    Durch die Konvertierung ändert man den Typ einer Variablen zu einem anderen. Das wird z.B. eben gemacht, um einen größeren Wertebereich zu haben (was macht man sonst mit Zahlen, die größer sind, als int sie darstellen kann?) oder ein anderes Format zu erhalten (int.TryParse ist z.B. ebenfalls eine Konvertierung, sie versucht, einen String in ein int zu übersetzen).

    i^2 ist eine Darstellung der Exponentiation, d.h. i^2 entspricht i². x^y wäre insofern eine y-mal ausgeführte Multiplikation von x, d.h. x * x * ... * x "y mal". Ich weiß nicht, ob du die schon kennst, aber ist ja schnell erklärt.
    Beispiele:
    - 2^4 = 2 * 2 * 2 * 2 = 16
    - 3^3 = 3 * 3 * 3 = 27
    - 4^0 = 1
    - 2^10 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 1024

    Das Gehe zu (I) bedeutet, dass zu Zeile 8 des Codes gegangen werden soll, dort ist in den Kommentaren das (I) eingetragen. Das ist quasi eine Marke, an der die Ausführung fortgesetzt werden soll.

    Viele Grüße
    ~blaze~