C# Kapselung

KapselungDefiniert als "das Einschließen eines oder mehrerer Elemente in ein physisches oder logisches Paket." In der objektorientierten Programmierung dient die Kapselung dazu, den Zugriff auf Implementierungsdetails zu verhindern.

Abstraktion und Kapselung sind verwandte Merkmale der objektorientierten Programmierung. Abstraktion ermöglicht es, relevante Informationen sichtbar zu machen, während Kapselung es Entwicklern ermöglichtdas erforderliche Maß an Abstraktion zu implementieren。

Die C#-Kapselung legt Benutzerzugriffsberechtigungen entsprechend den jeweiligen Anforderungen fest und setzt sie durchZugriffsmodifikatorenum.

aZugriffsmodifikatorenDefiniert den Gültigkeitsbereich und die Sichtbarkeit eines Klassenmembers. C# unterstützt die folgenden Zugriffsmodifikatoren:

  • public: Alle Objekte können darauf zugreifen;
  • private: Das Objekt selbst kann innerhalb des Objekts darauf zugreifen;
  • protected: Nur Objekte dieser Klasse und ihrer Unterklassen können darauf zugreifen;
  • internal: Objekte in derselben Assembly können darauf zugreifen;
  • protected internal: Der Zugriff ist auf die aktuelle Assembly oder von der enthaltenden Klasse abgeleitete Typen beschränkt.

Public-Zugriffsmodifizierer

Der Public-Zugriffsmodifizierer ermöglicht es einer Klasse, ihre Membervariablen und Memberfunktionen anderen Funktionen und Objekten zugänglich zu machen. Auf jedes public-Member kann von externen Klassen zugegriffen werden.

Das folgende Beispiel veranschaulicht dies:

Beispiel

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //Membervariable
        public double length;
        public double width;

        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Länge: {0}", length);
            Console.WriteLine("Breite: {0}", width);
            Console.WriteLine("Fläche: {0}", GetArea());
        }
    }// Rectangle endet

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Anzeigen();
            Console.ReadLine();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

长度: 4.5
宽度: 3.5
面积: 15.75

Im obigen Beispiel werden die Membervariablen length und width alspublicdeklariert, sodass sie von der Funktion Main() mit einer Instanz der Klasse Rectangle verwendet werden könnenrBesuchen.

MemberfunktionDisplay()undGetArea(), um direkt auf diese Variablen zuzugreifen.

MemberfunktionDisplay()wird ebenfalls alspublicdeklariert, sodass sie auch inMain() verwendet werden kannunter Verwendung einer Instanz der Klasse RectanglerBesuchen Sie.

Private-Zugriffsmodifizierer

Der Private-Zugriffsmodifizierer ermöglicht es einer Klasse, ihre Membervariablen und Memberfunktionen vor anderen Funktionen und Objekten zu verbergen. Nur Funktionen in derselben Klasse können auf ihre privaten Member zugreifen. Selbst Instanzen der Klasse können nicht auf ihre privaten Member zugreifen.

Das folgende Beispiel veranschaulicht dies:

Beispiel

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        // Private Membervariable
        private double length;
        private double width;

        // Öffentliche Methode zum Abrufen von Länge und Breite eines Rechtecks aus Benutzereingabe
        public void AcceptDetails()
        {
            Console.WriteLine("Bitte Länge eingeben:");
            length = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Bitte Breite eingeben:");
            width = Convert.ToDouble(Console.ReadLine());
        }

        // Öffentliche Methode zur Berechnung der Fläche eines Rechtecks
        public double GetArea()
        {
            return length * width;
        }

        // Öffentliche Methode zum Anzeigen der Eigenschaften und der Fläche des Rechtecks
        public void Display()
        {
            Console.WriteLine("Länge: {0}", length);
            Console.WriteLine("Breite: {0}", width);
            Console.WriteLine("Fläche: {0}", GetArea());
        }
    }//Ende der Klasse Rectangle    

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            // Erstellen einer Instanz der Klasse Rectangle
            Rectangle r = new Rectangle();

            // Länge und Breite des Rechtecks durch Benutzereingabe über die öffentliche Methode AcceptDetails() abrufen
            r.AcceptDetails();

            // Eigenschaften und Fläche des Rechtecks über die öffentliche Methode Display() anzeigen
            r.Anzeigen();

            Console.ReadLine();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

请输入长度:
5
请输入宽度:
3
长度: 5
宽度: 3
面积: 15

Beschreibung:

  • lengthundwidthAls private Membervariablen deklariert, um direkten Zugriff und Änderung außerhalb der Klasse zu verhindern.

  • AcceptDetailsDie Methode ermöglicht es Benutzern, die Länge und Breite des Rechtecks einzugeben; dies ist ein Beispiel für den Umgang mit privaten Variablen über öffentliche Methoden.

  • GetAreaDie Methode wird verwendet, um die Fläche des Rechtecks zu berechnen, undDisplayDie Methode wird verwendet, um die Eigenschaften und die Fläche des Rechtecks anzuzeigen.

  • InExecuteRectangleIn der Klasse, indemRectangleeine Instanz der Klasse erstellt und dann ihre öffentlichen Methoden aufgerufen werden, um Operationen auszuführen. Auf diese Weise kann das Hauptprogramm nicht direkt auf die Länge und Breite des Rechtecks zugreifen und sie ändern; stattdessen arbeitet es über die von der Klasse bereitgestellte öffentliche Schnittstelle und erreicht so Kapselung.

Protected-Zugriffsmodifizierer

Der Protected-Zugriffsmodifizierer ermöglicht es Unterklassen, auf die Membervariablen und Memberfunktionen ihrer Basisklasse zuzugreifen. Dies hilft bei der Implementierung von Vererbung. Wir werden dies im Kapitel über Vererbung ausführlich besprechen. Darauf wird ausführlicher eingegangen.

Internal-Zugriffsmodifizierer

Der Internal-Zugriffsmodifizierer ermöglicht es einer Klasse, ihre Membervariablen und Memberfunktionen anderen Funktionen und Objekten im aktuellen Programm verfügbar zu machen. Mit anderen Worten: Auf jedes Member mit dem internal-Zugriffsmodifizierer kann von jeder Klasse oder Methode zugegriffen werden, die in der Anwendung definiert ist, in der dieses Member definiert ist.

Das folgende Beispiel veranschaulicht dies:

Beispiel

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //Membervariable
        internal double length;
        internal double width;
       
        double GetArea()
        {
            return length * width;
        }
       public void Display()
        {
            Console.WriteLine("Länge: {0}", length);
            Console.WriteLine("Breite: {0}", width);
            Console.WriteLine("Fläche: {0}", GetArea());
        }
    }//Ende der Klasse Rectangle    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Anzeigen();
            Console.ReadLine();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

长度: 4.5
宽度: 3.5
面积: 15.75

Im obigen Beispiel beachten Sie bitte die MemberfunktionGetArea(), die ohne Zugriffsmodifizierer deklariert ist. Wenn kein Zugriffsmodifizierer angegeben ist, wird der Standard-Zugriffsmodifizierer für Klassenmember verwendet, und zwarprivate。

Protected-Internal-Zugriffsmodifizierer

Der Zugriffsmodifizierer Protected Internal ermöglicht den Zugriff innerhalb der enthaltenden Klasse, abgeleiteter Klassen oder der Assembly, die die Klasse enthält. Er wird auch zum Implementieren von Vererbung verwendet.

Weitere Erweiterungen