C# Kapselung (Encapsulation): Zugriffsmodifizierer & Datenschutz
Was ist Kapselung?
Kapselung (Encapsulation) bedeutet, Implementierungsdetails einer Klasse zu verbergen und nur eine kontrollierte Schnittstelle nach außen bereitzustellen. Sie ermöglicht die gewünschte Abstraktionsebene.
In C# wird Kapselung durch Zugriffsmodifizierer (Access Specifiers) realisiert.
Zugriffsmodifizierer in C#
| Modifizierer | Sichtbarkeit |
|---|---|
public | Überall zugreifbar. |
private | Nur innerhalb der definierenden Klasse. |
protected | Innerhalb der Klasse und abgeleiteter Klassen. |
internal | Innerhalb der gleichen Assembly (Projekt). |
protected internal | Kombination: protected ODER internal (ab C# 7.2 auch private protected für UND). |
public – Öffentlicher Zugriff
Member sind von überall erreichbar.
public class Rectangle
{
public double Length; // öffentlich
public double Width;
public double GetArea() => Length * Width;
public void Display()
{
Console.WriteLine($"Length: {Length}, Width: {Width}, Area: {GetArea()}");
}
}
// Nutzung
var r = new Rectangle();
r.Length = 4.5; // direkter Zugriff
r.Width = 3.5;
r.Display();
private – Privater Zugriff
Member sind nur innerhalb der Klasse sichtbar. Zugriff erfolgt über öffentliche Methoden (Getter/Setter oder Properties).
public class Rectangle
{
private double length;
private double width;
public void AcceptDetails()
{
Console.Write("Length: "); length = Convert.ToDouble(Console.ReadLine());
Console.Write("Width: "); width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea() => length * width;
public void Display()
{
Console.WriteLine($"Length: {length}, Width: {width}, Area: {GetArea()}");
}
}
// Nutzung
var r = new Rectangle();
r.AcceptDetails(); // setzt private Felder indirekt
r.Display();
protected – Für Vererbung
Ermöglicht abgeleiteten Klassen Zugriff auf Basisklassen-Member. Details im Kapitel Vererbung.
internal – Assembly-weit
Sichtbar für alle Typen innerhalb der gleichen Assembly (DLL/EXE). Standard für Klassen ohne Modifizierer.
internal class InternalClass { } // nur in diesem Projekt sichtbar
Hinweis: Fehlt bei einem Member der Modifizierer, ist der Default private.
protected internal – Kombiniert
Zugreifbar aus abgeleiteten Klassen oder Klassen derselben Assembly. Wird für Vererbungsszenarien über Assembly-Grenzen hinweg genutzt.
C Sprache
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Zugriffsmodifizierer verstehen: Public, Private, Protected, Internal und mehr
- C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C# Geschachtelte Klassen verstehen: Definition, Verwendung und Vererbung
- C# Partielle Klassen und Methoden verstehen
- Versiegelte Klassen und Methoden in C# meistern
- Java Encapsulation erklärt: Sichere Datenkapselung & Kontrolle
- Polymorphie in C++: Praktischer Leitfaden
- Datenabstraktion in C++: Interface-Implementierung-Trennung