CSharp Intro
Einführung in die Entwicklung mit C#
Basics
Wir verwenden in der Schule die Entwicklungsumgebung Jetbrains Rider um Programme mit der Programmiersprache C# zu entwickeln.
Voraussetzungen:
- Dotnet SDK muss installiert sein
- Jetbrains Rider muss installiert sein
Wir programmieren in C#
Popularität
C# ist eine der 10 populärsten Programmiersprachen. Quelle
Unsere Plattform ist .NET
Eine Plattform bietet alle Werkzeuge (Tools), die man benötigt um Software zu erstellen (build) und zu betreiben (run).
- .NET Plattform
- Kostenlos, Open Source Software
- Läuft auf unterschiedlichsten Typen von Computern
- Windows
- Linux
- Mac
- Android
- iOS
- Funktioniert mit unterschiedlichen Programmiersprachen
- Wir verwenden C#
- Andere: F#, Visual Basic
Übungsumgebung
- Manchmal möchte man gerne etwas auf einem Computer ausprobieren, auf dem kein .NET installiert ist
- zB Computer der Eltern
- Computer in einer öffentlichen Bibliothek
- Es gibt Online Entwicklungsumgebungen
- Achtung
- Manche dieser Umgebungen sind nicht aktuell
- Manche sind speziell dafür gemacht um Vorab-Versionen (Previews) auszuprobieren
- Online Entwicklungsumgebungen sollten nicht euer primäres Entwicklungstool sein, nutzt Rider!
Ordner Management
- Überlegt euch zu Beginn des Schuljahres eine Ordnerstruktur, damit ihr eure Projekte und unterlagen jederzeit wiederfindet.
- Tipp:
- Einen Ordner für jedes Schuljahr
- C:\HTL\2023_24
- C:\HTL\2024_25
- Einen Unterordner für jedes Fach
- C:\HTL\2024_25\SEW
- C:\HTL\2024_25\MEDT
- Einen Unterordner für jede Übung/Unterrichtseinheit
- C:\HTL\2024_25\SEW\001-Intro
- C:\HTL\2024_25\SEW\002-Calculator
- Einen Ordner für jedes Schuljahr
- Überlegt euch ein für euch sinnvolles Nummerierungsschema. Vermeidet Leer-, Sonderzeichen und Umlaute in Ordner- und Dateinamen
Praxis
- Erstellt ein neues Projekt mit Rider
- Wählt als Projekttyp eine Konsolenanwendung
- Nennt die Solution HelloWorld
- Nennt das Projekt ebenfalls HelloWorld
- Macht euch mit der Oberfläche in Rider vertraut
- Versucht das Programm auszuführen, und eine Konsolenausgabe zu erzeugen.
- Versucht das Programm zu debuggen und einen Breakpoint zu setzen, bei dem das Programm anhält.
Statements
Unser erstes Programm besteht aus 2 Zeilen. Die erste Zeile ist ein Kommentar, die zweite ein Statement.
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Statements und Kommentare
- Wir verwenden Kommentare, damit andere Personen unser Programm besser verstehen.
- Kommentare starten mit zwei Schrägstrichen
- Sind für den Programmierer, nicht für den Computer
- Werden vom Compiler ignoriert
- Ein Statement ist eine Aktion, die das Programm durchführen soll
- Muss mit einem Strichpunkt enden
- Kann in einer oder mehreren Zeilen stehen (für komplexere Szenarien)
- Werden von oben nach unten der Reihe nach ausgeführt.
Übung: mehrere Statements
// Print welcome messageConsole.WriteLine("Hello, my name is Norbert");Console.WriteLine("and I teach in Krems and Zwettl.");
Console.WriteLine(); // Print an empty line
// Print goodbye messageConsole.WriteLine("Thank you for using my program!");
- Fragen:
- wie viele Kommentare sind in diesem Programm?
- wie viele Statements?
Was ist Console.WriteLine?
- Eine Funktion die von .NET zur Verfügung gestellt wird
- Der volle Name heißt
System.Console.WriteLine
- In modernen Versionen von C# kann man das
System.
weglassen.
- In modernen Versionen von C# kann man das
- Gibt den Text in der Konsole aus und geht zur nächsten Zeile (Zeilenumbruch)
- Es gibt auch
Console.Write
(ohneLine
)- geht nicht zur nächsten Zeile (kein Zeilenunmbruch)
// The following three lines print three stars,// each in a SEPARATE line.Console.WriteLine("*");Console.WriteLine("*");Console.WriteLine("*");
// The following three lines print three stars// in a SINGLE line (i.e. "***")// because Write is used instead of WriteLine.Console.Write("*");Console.Write("*");Console.Write("*");
Übung: Kochrezept
- Schreib ein Programm, das ein Kochrezept in der Konsole ausgibt.
- Erstelle dein eigenes Rezept und kopiere nicht nur einfach das Beispiel.
- Formattiere die Ausgabe, zB:
- Verwende Überschriften in GROSSBUCHSTABEN
- Unterstreiche Überschriften mit speziellen Zeichen, wie =, *, oder -
- Verwende ASCII Art
// This enables emojisConsole.OutputEncoding = System.Text.Encoding.Default;
Console.WriteLine("CHEESE SANDWICH 🥪");Console.WriteLine("==================");Console.WriteLine();Console.WriteLine("Ingredients:");Console.WriteLine("🍞 1 slice of bread");Console.WriteLine("🧀 1 slice of cheese");Console.WriteLine("🍅 1 slice of tomato");Console.WriteLine();Console.WriteLine("How to prepare:");Console.WriteLine("1. Put the cheese on the bread");Console.WriteLine("2. Put the tomato on the cheese");Console.WriteLine("3. If you like, put it in the oven 🔥 for 5 minutes at 160°C");Console.WriteLine();
Console.WriteLine("Enjoy 🤤!");
Tips
\n
ist eine Escape Sequence. Damit wird ein Zeilenumbruch eingefügt- mit
Console.Clear()
kann der Inhalt der Konsole gelöscht werden. - Die Konsole unterstützt Farben
- muss for
Console.WriteLine
gemacht werden Console.BackgroundColor
ändert den HintergrundConsole.ForegroundColor
ändert die Schriftfarbe
- muss for
// Line Break:Console.WriteLine("Line 1\nLine 2\nLine 3");
// Clear Screen:Console.Clear();Console.WriteLine("Hello World on a blank screen");
// Colors:Console.BackgroundColor = ConsoleColor.Black;Console.ForegroundColor = ConsoleColor.White;Console.Write("My name is ");
Console.BackgroundColor = ConsoleColor.Yellow;Console.ForegroundColor = ConsoleColor.Green;Console.Write("Norbert");
Console.BackgroundColor = ConsoleColor.Black;Console.ForegroundColor = ConsoleColor.White;Console.Write("!");
Übung
Verbessere dein Rezept, indem du Farben verwendest.
Literals, Constants
- Ein Literal ist ein Wert der in deinem Programm vorkommt. zB:
- String literal:
"Hello World"
- Character literal:
'A'
- Integer literal:
42
- Floating point literal:
3.1415
- Boolean literal:
true
,false
- String literal:
- Eine Konstante ist ein Name für ein Literal
- Der Wert kann sich nicht ändern!
- Werden üblicherweise in GROSSBUCHSTABEN geschrieben
- zB:
const int ANSWER = 42;
oderconst string GREETING = "Hello World";
Variables
- Eine Variable ist ein Name für einen Wert, der sich ändern kann.
- Wird üblicherweise in kleinbuchstaben geschrieben.
- zB:
int answer = 42;
oderstring greeting = "Hello World";
- Übung:
- Schreibe ein Programm in dem Literale, Konstanten und Variablen verwendet werden.
- Versuche einer Variable eine Konstante zuzuweisen und umgekehrt. Was ist möglich?
Datentypen
- Der Datentyp definiert welche Werte eine Konstante oder eine Variable annehmen kann. zB:
- string (Zeichenkette/Text)
- char (einzelnes Zeichen)
- int (ganze Zahl)
- float, double (Gleitkommazahl)
- boolean (Wahrheitswert)
- Wir werden uns Datentypen später noch näher ansehen.
Beispiele
Console.Write("Take "); // "Take " is a String LiteralConsole.Write(3); // 3 is an Integer LiteralConsole.Write(" pizzas and bake it for ");Console.Write(1.5); // 1.5 is a Floating Point LiteralConsole.WriteLine(" minutes.");
Console.Write("Believe me, it is ");Console.Write(true); // True is a Boolean LiteralConsole.WriteLine(" that the pizza will be delicious!");
// Let's define a String Constant for the// address of our school. The address is// very unlikely to change -> a constant is a good choice.const string SCHOOL_ADDRESS = "Alauntalstraße 29, 3500 Krems";
Console.Write("I go to school at ");Console.WriteLine(SCHOOL_ADDRESS); // Here we use the constant
Console.Write("Please drive me to school at ");Console.WriteLine(SCHOOL_ADDRESS); // Here we use the constant again. // We DO NOT have to repeat the school's address 👍
// Let's define an Integer Constant and use itconst int NUMBER_OF_STUDENTS = 23;Console.Write(NUMBER_OF_STUDENTS);Console.WriteLine(" students are in our class.");
Console.Write("Please type in your name: ");string name = Console.ReadLine()!; // Here we declare a variable called name // and we assign it the value of the user input.Console.Write("Your name is ");Console.Write(name); // Here we use the variable to print out the entered name.Console.WriteLine();
Console.Write("Please type in the name of a friend: ");name = Console.ReadLine()!; // Here we let the user enter another name. // The value of name changes! Therefore, it has to be // a VARIABLE and cannot be a constant.Console.Write("Your friend's name is ");Console.Write(name);
Console.ReadLine
- Eine Funktion, von .NET zur Verfügung gestellt, so wie
Console.WriteLine
- Voller Name:
System.Console.ReadLine
- Liest einen Text von Standard Input
- aktuell ist das die Tastatur
- kann auch geändert werden
- Es gibt auch
Console.ReadKey
- Liest nur einen einzelnen Buchstaben
- Pausiert das Programm bis der Benutzer eine Taste gedrückt hat
Datentypen
- C# hat viele Datentypen. Wir benötigen am Anfang:
Datentyp | Beschreibung |
---|---|
string | Abfolge von 0 oder mehreren (Unicode) Zeichen |
char | Einzelnes (Unicode) Zeichen |
bool | Wahrheitswert (true oder false ) |
int , long , short , etc. | Ganzzahlige numerische Werte (keine Kommazahlen) |
float , double , decimal | Gleitkommazahlen. Faustregel: double für mathematische Berechnungen, decimal für Geldbeträge |
Literale der Datentypen
Datentyp | Beispiel | Bemerkung |
---|---|---|
string | "Hello World" | doppelte Anführungszeichen |
char | 'A' | einfache Anführungszeichen |
bool | true , false | |
int | 42 | |
long | 42L | Suffix L (=long) |
float | 42f | Suffix f (=float) |
double | 42d | Suffix d (=double) |
decimal | 42m | Suffix m (=money) |
String Parsing
- Parsing wird das Verfahren genannt, einen String in einen anderen Datentyp zu konvertieren
- zB
- Wir bitten den Benutzer eine Zahl einzugeben
Console.ReadLine
liefert immer einen string, wir bekommen daher einen String in dem eine Zahl steht, zB"42"
- Wir müssen den String-Wert parsen, um ihn in einen Integer-Wert umzuwandeln
int myIntegerValue = int.Parse("42");
Übung
- Erstelle ein Programm bei dem der Benutzer zwei Zahlen eingeben muss.
- Die Zahlen werden in Integer-Werte konvertiert
- Die Summe der beiden Werte wird berechnet und ausgegeben
- Bonusaufgabe: Der Benutzer soll wählen können, ob addiert, oder subtrahiert wird.
Math
- Die Klasse
Math
enthält viele nützliche Funktionen und Konstanten- PI, Absolutwert, Trigonometrische Funktionen (sin, tan, cos, etc)
- So wie bei
Console
ist der volle NameSystem.Math
Math - Merkliste
Funktion/Konstante | Beschreibung |
---|---|
Math.PI | Die Konstante |
Math.Abs | Absolutwert einer Zahl |
Math.Floor | Abrunden |
Math.Ceiling | Aufrunden |
Math.Min , Math.Max | Gibt die kleinere/größere von zwei Zahlen zurück |
Math.Pow | Potenz |
Math.Round | Rundet zur nächsten Zahl abhängig von der angegebenen Anzahl an Nachkommastellen |
Übung
- Erstelle ein Konsolenprogramm zur Berechnung einer Kreisfläche.
- Der Radius soll vom Benutzer eingegeben werden.
- Die Formel:
Expressions
- Eine Expression (Ausdruck) ist eine Berechnung, deren Ergebnis ein Wert eines bestimmten Datentyps ist.
- zB
length * width
- Ergebnis ist eine Zahlnumber % 2
- Ergebnis ist eine Zahlremainder == 0
- Ergebnis ist ein Wahrheitswertnumber > 5
- Ergebnis ist ein Wahrheitswert"The next number is " + number
- Das Ergebnis ist ein String
- Expressions enden nicht mit einem Strichpunkt
- Eine Zuweisung kann den Wert einer Expression einer Variable zuweisen. Die ganze Zeile ist dann ein Statement.
int area = length * width;
Advanced Integer Literals
- Verwende das Prefix
0x
to für Hexadezimalwerte- zB:
0x10 == 16
- zB:
- Verwende das Prefix
0b
für Binärwerte- zB:
0b1000 == 8
- zB:
- Verwende
_
um Ziffern zu gruppieren- Dient nur der Lesbarkeit und hat sonst keine Auswirkung
- zB
1_000_000
für eine Million
Code Blocks
- Mit geschwungenen Klammern
{}
können Statements zu Blöcken gruppiert werden.
Console.WriteLine("This stmt is at top-level");
{ // block starts here Console.WriteLine("This stmt is in"); Console.WriteLine("the first code block");} // block ends here
{ Console.WriteLine("This stmt is in"); Console.WriteLine("the second code block");}
Console.WriteLine("This stmt is at top-level again");
Nested Code Blocks
- Blöcke können verschachtelt werden
{ // OUTER block starts here Console.WriteLine("In first code block");
{ // INNER block starts here Console.WriteLine("In inner block"); } // INNER block ends here
} // OUTER block ends here
- Die Verwendung von Einrückung hilft beim Lesen und schützt vor Fehlern
Warum Code Blocks?
- Die Sichtbarket von Variablen/Konstanten ist auf einen Block limitiert
- Man sagt: Der Block ist der Scope der Variablen
- Variablen können verwendet werden in ihrem Block und in darunter verschachtelten Blöcken
{ int answer = 42; // variable is scoped to first code block Console.WriteLine("The answer is " + answer); { Console.WriteLine("The answer is " + answer); // works, because variable is defined in outer block }}
Console.WriteLine("The answer is " + answer); // Error: Does not work, variable not visible here
{ Console.WriteLine("The answer is " + answer); // Error: Does not work, variable not visible here}
Warum Code Blocks (2)
- Man kann denselben Variablennamen in unterschiedlichen Blöcken verwenden
- Es sind dann unterschiedliche Variablen obwohl sie denselben Namen haben
- Grund: Unterschiedlicher Scope
{ Console.Write("Please enter your name: "); string name = Console.ReadLine()!; Console.WriteLine("Your name is " + name);}
{ Console.Write("Enter your friend's name: "); string name = Console.ReadLine()!; Console.WriteLine("Your friend's name is " + name);}
Warum Code Blocks (3)
- Code Blocks werden verwendet um …
- einen Block nur auszuführen, wenn eine Bedingung erfüllt ist (if-Statement)
- einen Block mehrfach ausführen (Schleifen)
- einem Block einen Namen zu geben (Methoden)
if-Statement
if (...){ ...}else if (...){ ...}else{ ...}
switch-Statement
int grade = 1;
switch (grade){ case 1: Console.WriteLine("Genius!"); break; case 2: case 3: Console.WriteLine("Good!"); break; case 4: Console.WriteLine("Barely survived"); break; default: Console.WriteLine("Sorry, try again"); break;}
while-Loop
while (...){ ...}
do-while-Loop
do{ ...} while (...);
for-Loop
for (int i = 10; i > 0; i--){ Console.WriteLine(i);}
foreach-Loop
int[] array = [1, 2, 3, 4, 5];
foreach (int element in array){ Console.WriteLine(element);}
Arrays
// Declare a single-dimensional array of 5 integers.int[] array1 = new int[5];
// Declare and set array element values.int[] array2 = [1, 2, 3, 4, 5, 6];
// Declare a two dimensional array.int[,] multiDimensionalArray1 = new int[2, 3];
// Declare and set array element values.int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };
// Declare a jagged array.int[][] jaggedArray = new int[6][];
// Set the values of the first array in the jagged array structure.jaggedArray[0] = [1, 2, 3, 4];
Arrays (2)
- Die Anzahl der Dimensionen eines Arrays wird festgelegt wenn die Variable deklariert wird.
- Die Länge jeder Dimension wird festgelegt wenn die Instanz des Arrays erstellt wird.
- Diese Werte können sich nach der Erstellung nicht mehr ändern.
- Wir müssen also bei Arrays immer schon bei der Erstellung wissen, wie groß das Array werden wird.
Übung
- Erstelle ein mehrdimensionales Array, das ein Schachbrett abbildet.
- Ein Schachbrett hat 8x8=64 Felder
- Nummeriere die Felder von 1 bis 64 durch
int[,] chessBoard = new int[8,8];for (int row = 0; row < 8; row++){ for (int column = 0; column < 8; column++) { chessBoard[row, column] = (row * 8) + column + 1; }}
<>
Listen
- Eine Liste ist ein Datentyp, der mehrere Elemente aufnehmen kann, ähnlich einem Array.
- Im Unterschied zum Array, kann eine Liste beliebig wachsen und schrumpfen.
List<int> myList = new List<int>();
myList.Add(5);myList.Add(7);myList.Remove(5); // removes number 5myList.RemoveAt(0); // removes at index 1
Zufallszahlen
- Verwende
Random.Shared.Next
- Voller Name:
System.Random.Shared.Next
- Generiert eine zufällige Zahl
- Man kann die minimale Zahl (inklusive) und die maximale Zahl (exklusive) angeben
// Create a random number between 1 and 100int number = Random.Shared.Next(1, 101);
Übung
- Joker
- Tip für Level 1:
- Verwende ganzzahlige Divisionen
1234 / 100 == 12
- Tip für Level 2:
- Verwende den Modulo-Operator
1234 % 100 == 34
- Tip für Level 1:
String Interpolation
- Ist das Einfügen von Werten in einen String.
- Das Ergebnis ist ein neuer String.
- Für String Interpolation muss ein String mit einem Dollarzeichen beginnen. Eingefügte Werte werden mit geschwungenen Klammern gekennzeichnet.
int age = 15;
// build sentence using concatenationstring sentence1 = "I am " + age + " years old";
// build sentence using interpolationstring sentence2 = $"I am {age} years old";
// use an expression for interpolationstring sentence3 = $"1 + 1 equals {1 + 1}";
Methoden
- Methoden erlauben es einem Code Block einen Namen zuzuweisen
- Besonders wichtig wenn wir denselben Block öfter verwenden möchten
- Don’t repeat yourself - DRY
int CalculateSum(int a, int b){ return a + b;}
- Die Parameter a und b sind Werte die an die Methode übergeben werden. Innerhalb der Methode sind sie wie lokale (block-scoped) Variablen zu verwenden.
- Vor dem Methodennamen muss angegeben werden welchen Datentyp der Rückgabewert hat.
void
- Was wenn eine Methode keinen Rückgabewert hat?
- void ist ein spezielles Schlüsselwort genau für diesen Fall
// method without return value and without parametersvoid SayHello(){ Console.WriteLine("Hello World!");}
// method without return value but with a parametervoid SayHello(string name){ Console.WriteLine($"Hello {name}!");}
// method without parameters but with return valueint GetNumber(){ return 42;}
Expression-bodied methods
- Einzeilige Methoden können verkürzt geschrieben werden
// this ...bool IsSunday(){ return DateTime.Today.DayOfWeek == DayOfWeek.Sunday;}
// ... is the same as thisbool IsSunday() => DateTime.Today.DayOfWeek == DayOfWeek.Sunday;
Übung: Fizz Buzz
- Gib alle Zahlen zwischen 1 und 30 auf der Konsole aus
-
Ersetze jede Zahl die durch 3 teilbar ist mit dem Wort Fizz
-
Ersetze jede Zahl die durch 5 teilbar ist mit dem Wort Buzz
-
Ersetze jede Zahl die durch 3 UND 5 teilbar ist mit Fizz Buzz
-
Gib ein Komma zwischen jeder Zahl aus
-
Packe die Logik um eine Zahl in einen String für die Ausgabe zu konvertieren in eine Methode:
string ToFizzBuzz(int number) { ... }
-
Geforderte Ausgabe: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz
-
Übungsbeispiele
- Hier eine Liste zum selbstständigen Üben
Rosetta Code
- ist eine Website die bekannte Programmieraufgaben für verschiedene Sprachen listet
- Rosetta Code: C Sharp
C# Rückschau
- Bis jetzt haben wir gelernt Programme zu schreiben, die von oben nach unten, Statement für Statement durchlaufen.
- Um flexibler zu werden können wir auch den Ablauf mit Verzweigungen und Schleifen beeinflussen.
- Außerdem können wir wiederverwendbare Code-Blöcke definieren, sogenannte Methoden.
- Wir können mit unterschiedlichen Datentypen umgehen und Arrays und Listen verwenden.
C# OOP
- Wir lernen nun nach und nach Teile der objektorientierten Programmierung (OOP) kennen
- OOP folgt vier Prinzipien:
- Kapselung (engl. Encapsulation)
- Vererbung (engl. Inheritance)
- Polymorphismus (engl. Polymorphism)
- Abstraktion (engl. Abstraction)
- Wir werden diese im Laufe der Zeit kennenlernen
C# OOP (2)
- Mit der Objektorientierung wurde ein neues Paradigma in der Welt der Programmierung etabliert.
- Die Objektorientierung ist das zur Zeit vorherrschende Programmierparadigma
- Objektorientierung ist dem menschlichen Denken nachempfunden.
C# OOP (3)
- Das objektorientierte Programmierparadigma ist für Menschen leicht verständlich, da es menschlichen Denkmustern nachempfunden ist.
- Alle relevanten Größen und Abläufe werden in objektorientierten Programmen durch Objekte beschrieben. Soll in einem Spiel beispielsweise ein Drache dargestellt werden, existiert dafür im Programm ein Objekt Dragon. Genauso existiert für ein Schwert ein Objekt Sword und für ein Schloss das Objekt Castle usw.
- Ein Programm kann damit as System von Objekten verstanden werden, die untereinander Nachrichten austauschen.
C# Objekte
- Objekte können durch folgende Metriken beschrieben werden:
- ihre Eigenschaften
- ihr Zustand
- ihr Verhalten
C# Objekte - Eigenschaften
- Objekte besitzen Eigenschaften, sogenannte Properties.
- Eigenschaften werden verwendet um Objekte näher zu beschreiben.
- Für das Objekt Flugschiff sind beispielsweise folgende Eigenschaften bekannt:
- X und Y Koordinaten
- Speed
- Cost
- PullForce
- …
C# Objekte - Zustand
- Der Zustand eines Objekts wird durch die Summe, der in den Eigenschaften eines Objekts gespeicherten Werte beschrieben
- zB:
- X: 3
- Y: 4
- Speed: 35
- Cost: 1000000
- PullForce: 37
C# Objekte - Verhalten
- Das Verhalten von Objekten wird durch Operationen beschrieben, die ein Objekt durchführen kann. Die Operationen eines Objekts werden durch die Methoden eines Objekts abstrahiert, die in den Klassen definiert sind, zu denen die Objekte gehören.
C# Klassen
- Klassen sind Baupläne für Objekte. In einer Klasse wird bestimmt welche Eigenschaften und welches Verhalten ein Objekt hat. Klassen werden auch als Objekttypen.
- Klassen und Objekte sind die zentralen Konzepte der objektorientierten Programmierung.
C# Klassen (2)
- Ein Objekt gehört immer zu einer bestimmten Klasse. Die Klasse wird als der Objekttyp eines Objekts bezeichnet. Objekte sind Instanzen ihrer Klasse. Für jede Klasse kann es beliebig viele Instanzen geben. Klassen existieren genau einmal in einem Programm.
- Klassen sind Vorlagen für Objekte. Sie definieren die innere Zusammensetzung von Objekten.
C# Klassen - Bsp
// Klassendefinitionpublic class Airship{ public int X { get; set; } public int Y { get; set; } public int Speed { get; set; } public decimal Cost { get; set; } public List<string> Keywords { get; set; }}
// Deklaration und Instanziierung eines Objekts.// a1 ist eine Instanz der Klasse AirshipAirship a1 = new Airship();
// Deklaration und Instanziierung eines weiteren Objekts.// a2 ist eine Instanz der Klasse AirshipAirship a2 = new Airship();
C# Objektinstanzen
- Von einer Klasse können mehrere Instanzen (Objekte) erstellt werden.
- Jede dieser Objektinstanzen kann unterschiedliche Werte für die einzelnen Properties erhalten.
- Wir verwenden den Klassennamen bei Variablen wie einen Datentyp.
- Mit dem Schlüsselwort
new
wird eine neue Objektinstanz einer Klasse erzeugt.
C# Objektinstanzen - Bsp
Airship a = new Airship();Airship b = new Airship();a.Cost = 70_000m;b.Cost = 69_000m;
Console.Write($"Airship a costs {a.Cost}");Console.WriteLine($", but airship b costs {b.Cost}.");
C# Klassen - Aufbau
// Class Definitionpublic class Airship{ // Properties public int X { get; set; } public int Y { get; set; } public List<string> Keywords { get; set; }
// Constructor public Airship() { Keywords = new List<string>(); }
// Methods public void AddKeyword(string keyword) { Keywords.Add(keyword); }
public void Move(int x, int y) { this.X = x; this.Y = y; }}
C# Konstruktor
- Die Objektinstanzierung ist ein zentrales Konzept der OOP, welches ermöglicht Objekte aus Klassen zu erstellen.
- Im Zuge der Instanziierung eines Objekts wird der Konstruktor einer Klasse aufgerufen.
- Im Konstruktor kann die Objektinstanz initialisiert werden, damit diese bereit für die Verwendung ist.
C# Konstruktor - Bsp
// Wir definieren eine Variable vom Typ Airship.Airship a;
// An dieser Stelle kann die Variable noch nicht// verwendet werden, da noch keine Instanz erstellt wurde.// Wir sagen nur:// Diese Variable kann ein Objekt vom Typ Airship aufnehmen.
// Wir erstellen ein neues Objekt:a = new Airship();
// Durch die Verwendung des new Schlüsselwort// und der runden Klammern wird ein neues Objekt instanziiert.// Dafür wird der benötigte Speicher// für alle enthaltenen Properties allokiert (reserviert)// und der Konstruktor aufgerufen um das Objekt zu initialisieren.// Danach ist das Objekt bereit für die Verwendung.