C # - hermetyzacja
Encapsulationdefiniuje się jako „proces zamykania jednego lub więcej elementów w pakiecie fizycznym lub logicznym”. Hermetyzacja w metodyce programowania obiektowego uniemożliwia dostęp do szczegółów implementacji.
Abstrakcja i hermetyzacja to powiązane funkcje w programowaniu obiektowym. Abstrakcja pozwala na uwidocznienie istotnych informacji, a hermetyzacja umożliwia programiście wdrożenie pożądanego poziomu abstrakcji .
Hermetyzacja jest implementowana przy użyciu access specifiers. Naaccess specifierdefiniuje zakres i widoczność elementu członkowskiego klasy. C # obsługuje następujące specyfikatory dostępu -
- Public
- Private
- Protected
- Internal
- Chroniony wewnętrzny
Specyfikator dostępu publicznego
Specyfikator dostępu publicznego umożliwia klasie ujawnianie jej zmiennych składowych i funkcji składowych innym funkcjom i obiektom. Do każdego członka publicznego można uzyskać dostęp spoza zajęć.
Poniższy przykład ilustruje to -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
public double length;
public double width;
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Length: 4.5
Width: 3.5
Area: 15.75
W poprzednim przykładzie zadeklarowano zmienne składowe length i width public, więc można uzyskać do nich dostęp z funkcji Main () za pomocą instancji klasy Rectangle o nazwie r.
Funkcje składowe Display () i GetArea () mogą również uzyskiwać bezpośredni dostęp do tych zmiennych bez korzystania z żadnej instancji klasy.
Zadeklarowano również funkcje składowe Display ()public, więc można też uzyskać do niego dostęp z Main () za pomocą instancji klasy Rectangle o nazwier.
Specyfikator dostępu prywatnego
Specyfikator dostępu prywatnego umożliwia klasie ukrycie swoich zmiennych składowych i funkcji składowych przed innymi funkcjami i obiektami. Tylko funkcje tej samej klasy mogą uzyskać dostęp do jej prywatnych elementów członkowskich. Nawet instancja klasy nie może uzyskać dostępu do swoich prywatnych członków.
Poniższy przykład ilustruje to -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
private double length;
private double width;
public void Acceptdetails() {
Console.WriteLine("Enter Length: ");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter Width: ");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52
W poprzednim przykładzie zadeklarowano zmienne składowe length i width private, więc nie można uzyskać do nich dostępu z funkcji Main (). Funkcje członkowskie AcceptDetails () i Display () mają dostęp do tych zmiennych. Ponieważ funkcje członkowskie AcceptDetails () i Display () są zadeklarowanepublic, można uzyskać do nich dostęp z Main () za pomocą instancji klasy Rectangle o nazwier.
Specyfikator dostępu chronionego
Specyfikator dostępu chronionego umożliwia klasie podrzędnej dostęp do zmiennych składowych i funkcji składowych swojej klasy bazowej. W ten sposób pomaga we wdrażaniu dziedziczenia. Omówimy to bardziej szczegółowo w rozdziale poświęconym dziedziczeniu.
Specyfikator dostępu wewnętrznego
Specyfikator dostępu wewnętrznego umożliwia klasie ujawnienie jej zmiennych składowych i funkcji składowych innym funkcjom i obiektom w bieżącym zestawie. Innymi słowy, do każdego elementu członkowskiego z wewnętrznym specyfikatorem dostępu można uzyskać dostęp z dowolnej klasy lub metody zdefiniowanej w aplikacji, w której zdefiniowano element członkowski.
Poniższy program ilustruje to -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
internal double length;
internal double width;
double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Length: 4.5
Width: 3.5
Area: 15.75
W poprzednim przykładzie zwróć uwagę, że funkcja członkowska GetArea () nie została zadeklarowana z żadnym specyfikatorem dostępu. Jaki byłby zatem domyślny specyfikator dostępu członka klasy, jeśli o żadnym nie wspominamy? To jestprivate.
Chroniony specyfikator dostępu wewnętrznego
Specyfikator chronionego dostępu wewnętrznego umożliwia klasie ukrycie swoich zmiennych składowych i funkcji składowych przed innymi obiektami i funkcjami klasy, z wyjątkiem klasy potomnej w tej samej aplikacji. Jest to również używane podczas implementowania dziedziczenia.