C # - Incapsulamento
Encapsulationè definito "come il processo di racchiudere uno o più articoli all'interno di un pacchetto fisico o logico". L'incapsulamento, nella metodologia di programmazione orientata agli oggetti, impedisce l'accesso ai dettagli di implementazione.
L'astrazione e l'incapsulamento sono funzionalità correlate nella programmazione orientata agli oggetti. L'astrazione consente di rendere visibili le informazioni rilevanti e l'incapsulamento consente a un programmatore di implementare il livello di astrazione desiderato .
L'incapsulamento viene implementato utilizzando access specifiers. Unaccess specifierdefinisce l'ambito e la visibilità di un membro della classe. C # supporta i seguenti specificatori di accesso:
- Public
- Private
- Protected
- Internal
- Interno protetto
Identificatore di accesso pubblico
Lo specificatore di accesso pubblico consente a una classe di esporre le sue variabili membro e le funzioni membro ad altre funzioni e oggetti. È possibile accedere a qualsiasi membro pubblico dall'esterno della classe.
Il seguente esempio lo illustra:
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();
}
}
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Length: 4.5
Width: 3.5
Area: 15.75
Nell'esempio precedente, vengono dichiarate le variabili membro length e width public, quindi è possibile accedervi dalla funzione Main () utilizzando un'istanza della classe Rectangle, denominata r.
Anche la funzione membro Display () e GetArea () possono accedere direttamente a queste variabili senza utilizzare alcuna istanza della classe.
Vengono dichiarate anche le funzioni membro Display ()public, quindi è possibile accedervi anche da Main () utilizzando un'istanza della classe Rectangle, denominatar.
Identificatore di accesso privato
Lo specificatore di accesso privato consente a una classe di nascondere le sue variabili membro e le funzioni membro da altre funzioni e oggetti. Solo le funzioni della stessa classe possono accedere ai suoi membri privati. Anche un'istanza di una classe non può accedere ai suoi membri privati.
Il seguente esempio lo illustra:
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();
}
}
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52
Nell'esempio precedente, vengono dichiarate le variabili membro length e width private, quindi non è possibile accedervi dalla funzione Main (). Le funzioni membro AcceptDetails () e Display () possono accedere a queste variabili. Poiché vengono dichiarate le funzioni membro AcceptDetails () e Display ()public, è possibile accedervi da Main () utilizzando un'istanza della classe Rectangle, denominatar.
Identificatore di accesso protetto
Lo specificatore di accesso protetto consente a una classe figlia di accedere alle variabili membro e alle funzioni membro della sua classe base. In questo modo aiuta a implementare l'ereditarietà. Ne discuteremo più in dettaglio nel capitolo sull'eredità.
Identificatore di accesso interno
Lo specificatore di accesso interno consente a una classe di esporre le proprie variabili membro e funzioni membro ad altre funzioni e oggetti nell'assembly corrente. In altre parole, è possibile accedere a qualsiasi membro con specificatore di accesso interno da qualsiasi classe o metodo definito all'interno dell'applicazione in cui è definito il membro.
Il seguente programma lo illustra:
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();
}
}
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Length: 4.5
Width: 3.5
Area: 15.75
Nell'esempio precedente, notare che la funzione membro GetArea () non è dichiarata con alcun identificatore di accesso. Allora quale sarebbe l'identificatore di accesso predefinito di un membro della classe se non ne menzionassimo nessuno? Èprivate.
Identificatore di accesso interno protetto
Lo specificatore di accesso interno protetto consente a una classe di nascondere le proprie variabili membro e funzioni membro da altri oggetti e funzioni di classe, ad eccezione di una classe figlia all'interno della stessa applicazione. Viene utilizzato anche durante l'implementazione dell'ereditarietà.