Jeder kann coden / Programmieren & TicTacToe / Objektorientierte Programmierung / Objektorientierte Programmierung in C#
Objektorientierte Programmierung in C# Samples¶
![]() |
![]() |
Link zur Microsoft Dokumentation Link zu OOP Basics Link zum roten Faden auf Miro Link zu Tutorial auf w3schools |
Die objektorientierte Programmierung in C# hilft Entwicklern, Programme in strukturierte, wiederverwendbare und organisierte Einheiten aufzuteilen. Die Kernkonzepte der OOP sind Klassen, Objekte, Vererbung, Polymorphismus, Abstraktion und Kapselung.
1. Klassen und Objekte¶
Eine Klasse ist eine Blaupause, die Eigenschaften (Attribute) und Methoden (Funktionen) definiert. Ein Objekt ist eine Instanz einer Klasse.
Codebeispiel: Erstellen einer einfachen Klasse Person
¶
In [1]:
// Definiert eine Klasse namens 'Person' mit den Eigenschaften 'FirstName' und 'LastName' und einer Methode 'Introduce'.
public class Person
{
public string FirstName; // Vorname der Person
public string LastName; // Nachname der Person
// Methode, die die Person vorstellt.
public void Introduce()
{
Console.WriteLine($"Hello, my name is {FirstName} {LastName}");
}
}
// Erstellen und Verwenden eines Objekts der Klasse 'Person'
// Instanz der Klasse 'Person' erstellen und Eigenschaften festlegen
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
// Aufrufen der Methode 'Introduce', um eine Ausgabe zu erzeugen
person.Introduce();
Hello, my name is John Doe
In [2]:
public class Person
{
private string _lastName; // Privates Feld, das nur über eine Eigenschaft zugänglich ist
// Eigenschaft 'LastName' mit Lese- und Schreibzugriff
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
// Methode, um den vollständigen Namen auszugeben
public void PrintFullName()
{
Console.WriteLine($"Full Name: {_lastName}");
}
}
var person = new Person();
person.LastName = "Smith"; // Setzen des Nachnamens über die Eigenschaft
person.PrintFullName(); // Ausgabe des vollständigen Namens
Full Name: Smith
In [ ]:
public class Person
{
public string FirstName { get; } // Nur-Lese-Eigenschaft für Vorname
public string LastName { get; } // Nur-Lese-Eigenschaft für Nachname
// Konstruktor, der Vor- und Nachnamen als Argumente annimmt
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
// Methode, um eine Begrüßung auszugeben
public void Greet()
{
Console.WriteLine($"Hi, I am {FirstName} {LastName}");
}
}
public static void Main()
{
// Erstellen eines Objekts mit dem Konstruktor und Ausgabe der Begrüßung
var person = new Person("Jane", "Doe");
person.Greet();
}
In [ ]:
public class Person
{
public string FirstName { get; }
public string LastName { get; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public virtual void Introduce()
{
Console.WriteLine($"Hello, I am {FirstName} {LastName}");
}
}
// Klasse 'Employee', die von 'Person' erbt und eine zusätzliche Eigenschaft 'EmployeeId' besitzt
public class Employee : Person
{
public int EmployeeId { get; set; }
public Employee(string firstName, string lastName, int employeeId)
: base(firstName, lastName)
{
EmployeeId = employeeId;
}
// Methode überschreiben, um auch die Mitarbeiter-ID anzuzeigen
public override void Introduce()
{
Console.WriteLine($"Hello, I am {FirstName} {LastName}, Employee ID: {EmployeeId}");
}
}
var employee = new Employee("Alice", "Johnson", 1234);
employee.Introduce();
In [ ]:
public abstract class Shape
{
public abstract double GetArea(); // Abstrakte Methode zur Berechnung der Fläche
}
// 'Circle' erbt von 'Shape' und implementiert die Methode 'GetArea'
public class Circle : Shape
{
public double Radius { get; set; }
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
}
var circle = new Circle { Radius = 5.0 };
Console.WriteLine($"Area of Circle: {circle.GetArea()}");
In [ ]:
public interface IMovable
{
void Move(); // Methode, die implementierende Klassen definieren müssen
}
public class Car : IMovable
{
public void Move()
{
Console.WriteLine("The car is moving");
}
}
IMovable myCar = new Car();
myCar.Move();
In [ ]:
public class BankAccount
{
private decimal balance; // Privates Feld für den Kontostand
// Eigenschaft 'Balance' erlaubt nur Lesezugriff von außen
public decimal Balance
{
get { return balance; }
private set { balance = value; }
}
// Methode, um eine Einzahlung durchzuführen und den Kontostand zu aktualisieren
public void Deposit(decimal amount)
{
if (amount > 0)
{
Balance += amount;
Console.WriteLine($"Deposited {amount}. New Balance: {Balance}");
}
else
{
Console.WriteLine("Invalid deposit amount");
}
}
}
var account = new BankAccount();
account.Deposit(100); // Gültige Einzahlung
account.Deposit(-50); // Ungültige Einzahlung
Diese erweiterte Zusammenfassung bietet Erklärungen und eine sinnvolle Ausgabe für jedes Codebeispiel, um das Verständnis der Konzepte zu unterstützen und die Funktionsweise der Objektorientierung in C# zu verdeutlichen.