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
}
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
}
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;
}
}
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(":)");
}
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(":)");
}
}
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.
GO TO FULL VERSION