Zugriffsmodifikatoren beschränken ausschließlich Code außerhalb der Klasse. Innerhalb einer Klasse gibt es keine Zugriffstrennung.
Wie wir bereits gelernt haben, lassen sich alle Mitglieder von innerhalb einer Klasse uneingeschränkt aufrufen.
Im Folgenden lernen wir, wie man auf Mitglieder von außerhalb der Klasse zugreift.
Um auf öffentliche Instanzmitglieder von außen zuzugreifen, verwenden Sie unbedingt die Punktsyntax Objektvariablenname.Mitgliedname.
class Program
{
static void Main(string[] args)
{
Worker worker = new Worker(); // Objekt erstellen
int hours = worker.GetHours(); // Öffentliche Methode über das Objekt aufrufen
worker.hours = 12; // Öffentliche Variable über das Objekt belegen
Console.WriteLine(worker.hours); // Direkt auslesen wie eine einfache Variable
}
}
class Worker
{
int age;
private double savings;
public int hours;
void ReadSavings()
{
Console.WriteLine(savings);
}
public int GetHours()
{
return hours;
}
}Code-Sprache: C# (cs)
Die Methode GetHours von Worker ist mit public markiert und kann daher von außen gelesen und verändert werden.
Die Main-Methode innerhalb der Program-Klasse erstellt das Worker-Objekt worker.
Sie greifen über den Objektnamen auf öffentliche Mitglieder zu. Der Objektname funktioniert ähnlich wie ein Zeiger und hält eine Referenz (Speicheradresse), ergänzt um einen Punkt zur Adressierung der Mitglieder.

Syntax für den externen Zugriff auf Instanzmitglieder:Objektvariable.ÖffentlichesFeld / ÖffentlicheMethode().
private-Mitglieder lassen sich außerhalb der Klasse nicht mit Punktsyntax ansprechen.

Versuchen Sie Sie von außerhalb der Klasse auf private Mitglieder (Felder, Funktionen) zuzugreifen, erhalten Sie direkt einen Fehler.
Fehlerbeispiel
class Program
{
static void Main(string[] args)
{
Worker worker = new Worker();
int hours = worker.GetHours();
worker.hours = 12;
Console.WriteLine(worker.hours);
worker.ReadSavings();
worker.age = 20;
worker.savings = 1000000000.0;
}
}
class Worker
{
int age;
private double savings;
public int hours;
void ReadSavings()
{
Console.WriteLine(savings);
}
public int GetHours()
{
return hours;
}
}Code-Sprache: C# (cs)
Sehen wir uns ein weiteres Beispiel an
class Rectangle
{
// Öffentliche Instanzfelder:Länge Length, Breite Width
public int Length, Width;
// Instanzmethode:Berechnet und gibt die Rechteckfläche zurück
public int GetArea()
{
return Length * Width;
}
}
class Program
{
static void Main()
{
// Zwei unabhängige Rechteckinstanzen erzeugen
Rectangle rect1 = new Rectangle();
Rectangle rect2 = new Rectangle();
// Maße separat belegen, Daten sind voneinander abgetrennt
rect1.Length = 10; rect1.Width = 5;
rect2.Length = 8; rect2.Width = 7;
// Werte auslesen und Fläche ausgeben
Console.WriteLine("Rechteck 1:Länge {0}, Breite {1}, Fläche {2}", rect1.Length, rect1.Width, rect1.GetArea());
Console.WriteLine("Rechteck 2:Länge {0}, Breite {1}, Fläche {2}", rect2.Length, rect2.Width, rect2.GetArea());
}
}Code-Sprache: C# (cs)
Dies ist eine Rechteckklasse mit zwei öffentlichen Feldern Length und Width für Länge und Breite sowie einer Funktion GetArea zur Berechnung der Fläche.
Diese Mitglieder sind allesamt öffentlich.
Ausgabeergebnis
Rechteck 1:Länge 10, Breite 5, Fläche 50
Rechteck 2:Länge 8, Breite 7, Fläche 56
So sieht die Speicherbelegung aus

Beide Objekte liegen getrennt im Speicher, jedes besitzt eigene Length und Width und beeinflusst das andere nicht.
Zugriff auf Mitglieder von außerhalb der Klasse