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

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

    Achso ok.

    ~blaze~ schrieb:

    public class X //Die Deklaration der Klasse
    {
    public string S { get; } //Eine Eigenschaft, die read-only ist, d.h. es gibt nur get und kein set (siehe unten)
    public X(string s) //der Konstruktor, wobei string s ein Parameter ist
    {
    S = s;
    }
    }


    Das heißt hier wäre der Konstruktor die 2 Sachen:

    C#-Quellcode

    1. public class X //Die Deklaration der Klasse


    C#-Quellcode

    1. public X(string s) //der Konstruktor, wobei string s ein Parameter ist


    Bzw. das unterste wäre halt der Konstruktor.

    Ok. Verstehe
    Mit Freundlichen Grüßen
    AtomiX

    ~blaze~ schrieb:

    So wie ich das sehe, hat Pascalony sich aber auch nicht dagegen ausgesprochen, var zu verwenden...


    Meistens macht es keinen Sinn etwas NIE zu tun. Es kommt eben auf den Einzelfall an. Var ist meiner Meinung nach gut bei Variablendeklarationen wenn folgende Bedingungen erfüllt sind:

    - Der Klassenname ist extrem lang.
    - Der Variable wird ein Wert zugeweisen bei dem es offensichtlich ist, welchen Typ die Variable hat.

    Beispiel:

    C#-Quellcode

    1. var reader = new StreamReader(); //Name ist relativ lang, es ist offensichtlich, dass reader ein Streamreader ist
    2. var number = 11; //Hier fände ich short, byte, int besser, da eben nicht direkt klar wird, um welchen Value-Type es sich handelt. Wenn man das so machen möchte, könnte man noch eine Typ-spezifische Endung anhängen
    3. var number2 = 2.0f //hier würde ich vermutlich auch float nehmen, weil var und float sich vom Aufwand nicht unterscheiden, allerdings kann man dennoch erkennen, dass es sich um einen Float handelt


    Mircosoft selbst sagt, dass man in Schleifen var verwenden sollte. Das ist sinnvoll, wenn man z.B nicht weiß, wie viele Durchläufe es geben wird, da man dann nicht weiß, ob byte/int/short etc angebracht ist. Oberstes Ziel bei mir ist immer die saubere, leserliche Programmierung. Das heißt, dass ich die Methode verwende, die mehr Leserlichkeit mitsichbringt.

    Ich weiß übrigens nicht ob du es schon erwähnt hast, aber man kann Konstruktoren auch überladen, also @AtomiX nicht wundern, wenn in einer Klasse mehrere Konstruktoren stehen. Überladen heißt, dass du einen weiteren Konstruktor definierst, nur dass dieser entweder eine andere Anzahl an Parametern übernimmt, oder sich die Typen der Parameter unterscheiden.

    AtomiX schrieb:

    Das heißt hier wäre der Konstruktor die 2 Sachen:


    Das erste ist nur die Deklaration der Klasse. Das andere ist, wie du richtig erkannt hast, der Konstruktor. Ein weiterer Hinweis, dass es sich um einen Konstruktor handelt ist, dass er keinen Rückgabetypen besitzt, also nichtmal void.

    Pascalony schrieb:

    Ich weiß übrigens nicht ob du es schon erwähnt hast, aber man kann Konstruktoren auch überladen, also @AtomiX nicht wundern, wenn in einer Klasse mehrere Konstruktoren stehen. Überladen heißt, dass du einen weiteren Konstruktor definierst, nur dass dieser entweder eine andere Anzahl an Parametern übernimmt, oder sich die Typen der Parameter unterscheiden.


    Ah ok Danke für die Info :)

    #Update

    while (!s.EndOfStream)

    Da hatte ich noch mal eine Frage:
    Und zwar dieses s.
    Heißt das das die Var diese Methode / Funktion ausführt?

    Und ich vergesse es andauernd was dieses ! Heißt.

    Kann mir das nochmal jemand schreiben? :D
    Mit Freundlichen Grüßen
    AtomiX

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

    ~blaze~ schrieb:

    StreamReader s = new StreamReader("...");


    Das s ist eine Instanz der Klasse Streamreader (System.IO.Streamreader).

    ~blaze~ schrieb:

    while (!s.EndOfStream)


    Zerlegen wir das mal in seine Bestandteile:

    while(statement) heißt, dass die Schleife solange ausgeführt wird, wie die Bedinung in der Klammer wahr ist.
    Der Punkt bei s.EndOfStream ist der member-access-operator. Das heißt, es wird eine Methode aufgerufen, die Teil (Member) der Instanz von s ist. Das bedeutet, dass es in s eine Methode namens EndOfStream gibt, die jetzt aufgerufen wird. Das Ausrufezeichen ist nichts weiter als eine Negation. Beispiel:

    C#-Quellcode

    1. bool foo = true;
    2. bool foo1 = !foo; //jetzt ist foo1 = false


    Also kann die Schleife so gelesen werden: Wiederhole, solange das Ende des Streams noch nicht erreicht wurde.

    Pascalony schrieb:

    Der Punkt bei s.EndOfStream ist der member-access-operator. Das heißt, es wird eine Methode aufgerufen, die Teil (Member) der Instanz von s ist.


    Kann man sich das ungefähr so vorstellen, wie eine Bibliothek wo man aus dem Regal s. sucht bzw. aufruft und dann nach EndofStream sucht bzw. anspricht?
    Nur mal so als Beispiel das ich mir das besser vorstellen kann...

    Noch eine Frage:
    Kann vielleicht jemand mal kurz und knackig mir mal aufschreiben was eine Methode, Klasse, Objekt und Instanz ist, am besten so kurz wie möglich, weil ich verwechsel das irgendwie immer was wsa ist ...

    :)

    Mit Freundlichen Grüßen
    AtomiX
    Um bei deinem Beispiel zu bleiben: Das Regal ist s. Der .-Operator heißt, dass du das Buch suchst und EndOfStream ist das gefundene Buch.

    Methode:

    Eine Methode ist eine Prozedur/Funktion (ein Codeblock), die beliebig oft ausgeführt werden kann. Du kennst doch von PHP Funktionen. Genau das ist eine Methode

    C#-Quellcode

    1. public int TestMethod(int parameter1, int parameter2)
    2. {
    3. ... //irgendein Code der ausgeführt werden soll
    4. return ... //jetzt muss etwas zurückgegeben werden und zwar ein Integer da wir oben den Rückgabetyp als Integer deklariert haben
    5. }


    Eine Klasse kannst du dir so vorstellen, als ob du dir deinen eigenen Datentyp erstellst:

    C#-Quellcode

    1. public class TestClass
    2. {
    3. }


    Jetzt hast du den Datentyp "TestClass". Das ist jetzt genauso ein Datentyp wie Integer, Streamreader, Float etc auch.

    Eine Instanz ist jetzt ein Objekt von dieser Klasse. Folgendes Beispiel: Die Klasse ist zum Beispiel "Auto". Das Auto hat eine Farbe, einen Hersteller etc. Eine Instanz von der Klasse "Auto" wäre jetzt zum Beispiel ein grüner BMW.

    C#-Quellcode

    1. public class Auto {} //Klasse!
    2. Auto testAuto = new Auto() //Instanz


    Über eine Instanz können die Methoden aufgerufen werden:

    C#-Quellcode

    1. Auto.Drive() //nur ein Beispiel

    Ah ok.
    Vielen lieben Dank :)

    Weil die vergleiche mit PHP : kann ich mir das viel besser vorstellen, weil ich dann auch schon ungefähr weiß was die für eine Aufgabe haben :)

    Danke das dürfte es erstmal sein :)
    Mit Freundlichen Grüßen
    AtomiX
    Meine letze Frage ist :
    Gibt es so ein Art echo wie in PHP oder wie ein Console.WriteLine();

    Auch in WinForms, weil ich habe gehört das Console.WriteLine(); gibt es dort gar nicht...
    Oder braucht man das nicht weil man eh mit Browser arbeitet?
    Mit Freundlichen Grüßen
    AtomiX
    Bei WinForms gibt es nichts von beidem. Gibt aber unterschiedliche Wege Texte auszugeben. Du könntest den Text einer Komponente verändern (Form1.Text, Label1.Text etc) oder du könntest eine MessageBox aufrufen

    C#-Quellcode

    1. MessageBox.Show("dein text")


    Wenn du z.B eine Variable vom Typ integer ausgeben willst könntest du es wie folgt tun:

    C#-Quellcode

    1. MessageBox.Show(variable.ToString())

    Na a-Bär:

    VB.NET-Quellcode

    1. System.Diagnostics.Debug.WriteLine("Test 1");
    2. Console.WriteLine("Test 2");

    Beide Textzeilen taucht bei Aufruf dann im Fenster »Ausgabe« (zu finden unter Menü "Ansicht" -> "Ausgabe") auf.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Kurz vorab ich meinte das so wie Pascalony


    Ich verstehe das hier nicht:
    MessageBox.Show(variable.ToString())

    Du hättest ja geschrieben wenn man das in einen int machen möchte muss man das so wie oben machen.
    ABER müsste es da nicht so heißen :
    MessageBox.Show(variable.ToInteger())
    Oder
    MessageBox.Show(variable.ToJnt())

    Oder heißt das nur wenn man eine Var vom Typ ist als String ausgeben will?
    Mit Freundlichen Grüßen
    AtomiX

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

    Schau dir mal das an: msdn.microsoft.com/de-de/libra…gebox.show(v=vs.110).aspx
    Der Text in der Messagebox muss ein string sein. Wenn du jetzt eine Integer-Variable hast, also

    C#-Quellcode

    1. int variable = 10;


    Wie kommst du jetzt auf einen string? Richtig variable.ToString(). Also:

    C#-Quellcode

    1. MessageBox.Show(variable.ToString());


    Es ist übrigens egal welchen Typ variable hat, da die meisten Datentypen .ToString() überschreiben kannst du fast immer .ToString() anhängen:

    C#-Quellcode

    1. bool foo = true;
    2. MessageBox.Show(foo.ToString());