Jeder kann coden / Programmieren & TicTacToe / Objektorientierte Programmierung / Objektorientierte Programmierung in C#
Zugriffsmodifizierer in C#¶
![]() |
![]() |
C# Access Modifiers - Microsoft Docs Understanding Access Modifiers in C# - DotNetPerls C# Access Modifiers - W3Schools |
In C# gibt es fünf Zugriffsmodifizierer, die den Zugriff auf Klassen, Methoden und Felder steuern: public
, private
, protected
, internal
, und protected internal
. Ich erkläre dir jeden Modifizierer und zeige ein Beispiel im Kontext der Umweltinformatik.
public
¶
Der public
Modifizierer erlaubt den Zugriff auf ein Feld, eine Methode oder eine Klasse von überall im Projekt.
Beispiel¶
public class Sensor
{
public string Name { get; set; }
public void Messen()
{
Console.WriteLine($"{Name} misst Umweltdaten...");
}
}
Sensor sensor = new Sensor { Name = "CO2-Sensor" };
sensor.Messen(); // Zugriff auf `Messen` von überall möglich
public class Datenlogger
{
private string datenFormat = "JSON";
public void LogDaten()
{
Console.WriteLine($"Daten werden im {datenFormat}-Format gespeichert.");
}
}
Datenlogger logger = new Datenlogger();
logger.LogDaten();
// Kein direkter Zugriff auf `datenFormat` von außerhalb der Klasse
public class Sensor
{
protected string Einheit = "ppm";
public void Ausgabe()
{
Console.WriteLine("Sensordaten werden ausgegeben.");
}
}
public class CO2Sensor : Sensor
{
public void Messen()
{
Console.WriteLine($"CO2-Level wird in {Einheit} gemessen.");
}
}
CO2Sensor sensor = new CO2Sensor();
sensor.Messen();
internal class DatenVerarbeiter
{
public void Verarbeiten()
{
Console.WriteLine("Umweltdaten werden verarbeitet.");
}
}
DatenVerarbeiter verarbeiter = new DatenVerarbeiter();
verarbeiter.Verarbeiten(); // Zugriff innerhalb derselben Assembly
public class Sensor
{
protected internal string SensorTyp = "Luftqualitätssensor";
public void Ausgabe()
{
Console.WriteLine($"Typ: {SensorTyp}");
}
}
public class FeinstaubSensor : Sensor
{
public void Messen()
{
Console.WriteLine($"{SensorTyp} misst Feinstaubpartikel...");
}
}
FeinstaubSensor sensor = new FeinstaubSensor();
sensor.Messen();
Diese Beispiele illustrieren, wie Zugriffsmodifizierer helfen, den Zugriff auf Daten und Methoden zu kontrollieren, was für eine strukturierte Softwarearchitektur, wie sie auch in der Umweltinformatik wichtig ist, entscheidend ist.
Übung¶
Hier ist ein kleines Übungsprogramm, bei dem der Benutzer entscheiden muss, welche Zugriffsmodifizierer (public
, private
, protected
, internal
, protected internal
) in den entsprechenden Zeilen ergänzt werden sollen:
Beschreibung:¶
Das Programm simuliert eine Umweltstation, die verschiedene Sensoren (z. B. Temperatur- und Feuchtigkeitssensoren) verwaltet. Der Benutzer muss die Zugriffsmodifizierer hinzufügen, um das Programm funktionsfähig zu machen und sicherzustellen, dass es den gewünschten Zugriffseinschränkungen entspricht.
Übungsprogramm:¶
// Ergänze den Zugriffsmodifizierer: Soll diese Klasse nur innerhalb der Assembly zugänglich sein?
class UmweltStation
{
// Ergänze den Zugriffsmodifizierer: Soll der Name der Station von außen änderbar sein?
string StationName;
// Ergänze den Zugriffsmodifizierer: Soll diese Methode nur innerhalb der Klasse oder auch von außen aufgerufen werden können?
void SetStationName(string name)
{
StationName = name;
}
// Ergänze den Zugriffsmodifizierer: Soll diese Methode auch in abgeleiteten Klassen verfügbar sein?
string GetStationName()
{
return StationName;
}
}
// Ergänze den Zugriffsmodifizierer: Soll diese Klasse von überall zugänglich sein?
class Sensor
{
// Ergänze den Zugriffsmodifizierer: Soll dieser Wert nur von abgeleiteten Klassen geändert werden können?
string SensorTyp;
// Ergänze den Zugriffsmodifizierer: Soll diese Methode öffentlich verfügbar sein?
void ErfasseDaten()
{
Console.WriteLine($"Erfasse Daten vom Typ: {SensorTyp}");
}
}
// Ergänze die Zugriffsmodifizierer, sodass diese Instanz korrekt erstellt und verwendet werden kann.
UmweltStation station = new UmweltStation();
Sensor sensor = new Sensor();
// Ergänze die Zugriffsmodifizierer so, dass diese Methodenaufrufe möglich sind:
// station.SetStationName("Station Berlin");
// Console.WriteLine($"Station Name: {station.GetStationName()}");
// sensor.ErfasseDaten();
Lösungshinweise:¶
- Überlege, ob Variablen oder Methoden von außen zugänglich sein sollen (
public
), nur innerhalb der Klasse (private
), oder in abgeleiteten Klassen (protected
). internal
kann verwendet werden, wenn der Zugriff nur innerhalb des Projekts erlaubt sein soll.- Der
protected internal
Modifizierer kann kombiniert verwendet werden, wenn der Zugriff innerhalb des Projekts und in abgeleiteten Klassen erlaubt sein soll.
Wenn du möchtest, kann ich auch die Lösung mit den richtigen Zugriffsmodifizierern bereitstellen.