CodeGym /Kurse /C# SELF /Aufbau eines typischen Programms in C#

Aufbau eines typischen Programms in C#

C# SELF
Level 8, Lektion 1
Verfügbar

1. Ein Programm – wie ein Büro voller Abteilungen

Wenn du gerade erst mit Programmieren anfängst, denkst du vielleicht, dass man einfach Zeile für Zeile Code schreiben kann und alles läuft. Aber sobald das Programm etwas komplizierter wird, herrscht im Kopf Chaos: Wo ist was, warum wurde das geschrieben, und wenn du eine Zeile ändern musst – wo liegt die überhaupt?..

Deshalb bietet uns C#, wie die meisten modernen Sprachen, eine Möglichkeit, den Code in "Schubladen" zu sortieren, damit man jederzeit versteht, was das Programm macht und schnell die richtige Stelle findet.

Stell dir eine Firma vor. Es gibt eine Personalabteilung, Buchhaltung, IT-Abteilung, Logistik und so weiter. Jede Abteilung hat ihren eigenen Verantwortungsbereich, eigene Mitarbeiter und Aufgaben.

In einem C#-Programm ist jede solche "Abteilung" eine Klasse. Eine Klasse ist zum Beispiel für die Arbeit mit Benutzern zuständig, eine andere für Berechnungen, eine dritte für die Arbeit mit Dateien.

So sieht die typische Struktur eines einfachen Projekts aus:

  • Program.cs – das Hauptbüro: Hier ist der "Einstiegspunkt", von dem alles startet.
  • User.cs – die Abteilung, in der Benutzerdaten gespeichert und verarbeitet werden.
  • Calculator.cs – die Berechnungsabteilung.
  • FileHelper.cs – die Dateispezialisten.

Sogar in einem ganz kleinen Programm gibt es normalerweise mindestens eine Klasse. Und große Projekte – das ist schon ein ganzer "Wolkenkratzer" aus hunderten von Klassen!

2. Eine Klasse – das ist eine Werkzeugkiste

C# ist eine objektorientierte Sprache und alles darin sind Objekte. Die Typen der Objekte nennt man Klassen.

Eine Klasse ist wie eine Kiste oder ein Schränkchen, in das wir die Dinge legen, die wir brauchen: Variablen, Methoden, Properties. Stell dir eine Kiste mit der Aufschrift "Hämmer" vor: Drin liegen nur Werkzeuge, die mit Hämmern zu tun haben.

class Example
{
    // Hier kommen unsere Werkzeuge rein: Variablen, Methoden, Properties
}
Deklaration einer Klasse in C#

Klassen enthalten normalerweise Variablen und Funktionen. In C# nennt man die Variablen einer Klasse Felder und die Funktionen der Klasse Methoden. Aber der Sinn bleibt derselbe.

Erinnerst du dich an unseren ersten Code?

Console.WriteLine("Hallo zusammen!");
string name = Console.ReadLine();

In diesem Code gibt es sowohl eine Klasse als auch Methoden:

  • Console – das ist eine Klasse, die Methoden (Funktionen) für die Arbeit mit der Konsole enthält.
  • WriteLine – das ist eine Methode der Klasse Console, die Text auf dem Bildschirm ausgibt.
  • ReadLine – das ist eine Methode der Klasse Console, die Eingaben von der Tastatur liest.

Im Grunde genommen läuft Programmieren darauf hinaus, eigene Klassen und Methoden zu schreiben, die wiederum Methoden anderer Klassen aufrufen.

3. Felder (Variablen) der Klasse – das ist ihr Gedächtnis

Innerhalb einer Klasse kann man Variablen speichern (die nennt man oft "Felder"). Das sind wie Speicherzellen, in die wir irgendwelche Daten legen.

class Counter
{
    int value; // Feld – hier wird der aktuelle Wert des Counters gespeichert
}
Beispiel für ein Feld (Variable) einer Klasse

Felder erlauben einer Klasse, sich zwischen verschiedenen Methodenaufrufen etwas zu merken. Zum Beispiel, wie oft ein Button gedrückt wurde.

Es kann beliebig viele Felder geben. Beispiel:

class User
{
    int id;             // eindeutige Nummer des Benutzers
    string name;        // Name des Benutzers
    int age;            // Alter
    string address;      // Adresse
    User[] children;    // Kinder
}

4. Methoden – Aktionen, die eine Klasse ausführen kann

Methoden sind die "Fähigkeiten" unserer Klasse. Wenn die Klasse ein Mitarbeiter ist, dann sind Methoden seine Skills: was er tun kann.

  • Eine Methode kann etwas auf dem Bildschirm ausgeben.
  • Die Summe von zwei Zahlen berechnen.
  • Daten "entgegennehmen" und ein Ergebnis zurückgeben.

Aufbau einer Methode:

  • Rückgabetyp (zum Beispiel void – wenn nichts zurückgegeben wird, oder int – wenn eine Zahl zurückgegeben wird)
  • Name der Methode (zum Beispiel Print)
  • Parameter in Klammern (kann auch leer sein)
  • Geschweifte Klammern { ... } – der Methodenkörper
class Printer
{
    public void PrintHello()
    {
        Console.WriteLine("Hallo!");
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}
Beispiel für Methoden einer Klasse

Mehr Details zu Methoden und allen Feinheiten dazu bekommst du in den nächsten Vorlesungen.

5. Properties – smarte Variablen

Ein Property (property) ist wie eine "aufgebohrte" Variable: Sie speichert nicht nur einen Wert, sondern kann auch etwas tun, wenn der Wert gelesen oder geändert wird.

Beispiel aus dem echten Leben: Du kannst nicht einfach so das Gehalt eines Mitarbeiters ändern – die Buchhaltung prüft, ob alles korrekt ist. Genauso kann ein Property die Daten "prüfen":

class Person
{
    private int age;		// Variable (Feld) der Klasse 

    public int Age			// Property Age. Speichert Daten im Feld age.
    {
        get { return age; }	// get-Methode – wird aufgerufen, wenn jemand den Wert von Age abfragt 
        set 				// set-Methode – wird aufgerufen, wenn jemand den Wert von Age ändern will 
        {
            if (value >= 0)
                age = value;
        }
    }
}

Der Code in der set-Methode lässt kein negatives Alter zu. Mehr zu Properties gibt's in den nächsten Vorlesungen.

6. Zugriffsmodifikatoren

In C# kannst du festlegen, welche Teile einer Klasse von anderen Klassen aus zugänglich sind und welche nur für den internen Gebrauch bleiben. Dafür gibt es Zugriffsmodifikatoren. Wenn vor dem Namen eines Felds, einer Methode oder einer Klasse das Schlüsselwort public steht, kann man darauf von überall im Programm zugreifen.

Wenn vor dem Namen eines Felds, einer Methode oder einer Klasse das Schlüsselwort private steht, kann man darauf nur aus der eigenen Klasse zugreifen. Andere Klassen sehen dieses Feld oder diese Methode nicht. Als ob sie gar nicht existieren würden.

  • public – für alle sichtbar. Solche Methoden und Properties kann man aus anderen Klassen verwenden.
  • private – nur innerhalb der eigenen Klasse sichtbar. Das sind interne Details, die nicht für andere zugänglich sein sollen.
class Demo
{
    public int OpenValue;     // von außen sichtbar
    private int secretValue;  // nur intern sichtbar

    public void ShowOpen() { Console.WriteLine(OpenValue); }
    private void HideSecret() { Console.WriteLine(secretValue); }
}

Goldene Regel: Felder macht man meistens private und nach außen gibt man nur die nötigen Methoden und Properties (public) frei.

7. Wie sieht eine echte Klasse aus

Hier ein "zusammengebautes" Beispiel – ein Mini-Taschenrechner:

class Calculator
{
    private int result; // Feld zum Speichern des Ergebnisses

    public int Result
    {
        get { return result; }
        private set { result = value; } // nur innerhalb der Klasse zugänglich
    }

    public void Add(int a, int b)
    {
        result = a + b;
    }

    public void Clear()
    {
        result = 0;
    }
}

So ein Ansatz findet sich in fast allen modernen C#-Programmen!

8. Top-level statements

Eigentlich ist in C# jeder Code immer in Klassen. Die Klasse ist die kleinste Einheit eines Programms. Es kann viele Klassen geben, aber mindestens eine muss es geben.

Moment mal, was ist mit dem ganzen Code, den wir gerade geschrieben haben – da gab's doch gar keine Klassen?!

Das ist eines der neuen Features von C#: Du kannst Code ohne Klasse schreiben und der C#-Compiler macht automatisch eine Klasse daraus.

Angenommen, du hast diesen Code in Program.cs:

// dein Code
WriteSmile();
WriteSmile();
WriteSmile();

//deine eigene Funktion
void WriteSmile()
{
    Console.WriteLine(":)");
}
Top-level statement: Code ohne Klasse

Der C#-Compiler wandelt das in Folgendes um:

using System;

class Program
{
    static void Main()			// dein Code
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//deine eigene Funktion
    {
        Console.WriteLine(":)");
    }
}
Wie der Compiler ein top-level statement in eine Klasse umwandelt

Wenn du nur die Hälfte der Vorlesung verstanden hast, kein Stress: Hauptsache, du hast das Grundprinzip geschnallt. In den nächsten Vorlesungen gehen wir alles Schritt für Schritt durch, was hier steht.

2
Aufgabe
C# SELF, Level 8, Lektion 1
Gesperrt
Erstellung einer einfachen Klasse mit einem Feld und einer Methode
Erstellung einer einfachen Klasse mit einem Feld und einer Methode
2
Aufgabe
C# SELF, Level 8, Lektion 1
Gesperrt
Klasse mit mehreren Methoden
Klasse mit mehreren Methoden
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION