Zugriff auf Mitglieder von außerhalb der Klasse

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert