Åtkomstmodifierare - Access modifiers
Åtkomstmodifierare (eller åtkomstspecifikatorer ) är nyckelord på objektorienterade språk som ställer in tillgängligheten för klasser, metoder och andra medlemmar. Åtkomstmodifierare är en specifik del av programmeringsspråkens syntax som används för att underlätta inkapsling av komponenter.
I C ++ finns det bara tre åtkomstmodifierare. C # utökar antalet till sex, medan Java har fyra åtkomstmodifierare, men tre nyckelord för detta ändamål. I Java är standardpaketet privat modifierare utan att ha något nyckelord.
När klassen deklareras som offentlig är den tillgänglig för andra klasser som definieras i samma paket liksom de som definieras i andra paket. Detta är den vanligaste specifikationen för klasser. En klass i sig kan dock inte förklaras som privat. Om ingen åtkomstspecifikator anges anges standardåtkomstbegränsningarna. Klassen kommer att vara tillgänglig för andra klasser i samma paket men kommer inte att vara tillgänglig för klasser utanför paketet. När vi säger att en klass är otillgänglig betyder det helt enkelt att vi inte kan skapa ett objekt av den klassen eller förklara en variabel av den klasstypen. Specifieraren för skyddad åtkomst kan inte tillämpas på en klass.
Namn på nyckelord
C ++ använder de tre modifierare kallas public , protected och private . C # har modifierare public , protected , internal , private , protected internal , och private protected . Java har public , package , protected , och private . Åtkomstmodifieraren package är standard och används, om något annat sökord för åtkomstmodifierare saknas. Betydelsen av dessa modifierare kan skilja sig från språk till språk. En jämförelse av nyckelorden, ordnade från de mest begränsande till de mest öppna, och deras betydelse på dessa tre språk följer. Deras synlighet sträcker sig från samma klass till paketet där klassen definieras till en allmän åtkomstbehörighet. Nedan skrivs maximal åtkomst i tabellen.
I Swift finns det fem olika åtkomstnivåer i förhållande till både källfilen där enheten är definierad och modulen som innehåller den källfilen.
| Nyckelord | C # | C ++ | Java | Snabb |
|---|---|---|---|---|
private |
klass | klass och / eller vänklasser |
klass | bifoga endast deklaration + förlängningar av deklarationen i samma fil |
fileprivate |
- | - | - | samma fil |
private protected |
härledda klasser i samma sammansättning | - | - | - |
protected internal |
samma monterings- och / eller härledda klasser |
- | - | - |
protected |
härledda klasser | härledda klasser och / eller vänklasser |
härledda klasser och / eller inom samma paket |
- |
package |
- | - | inom sitt paket | - |
internal |
samma montering | - | - | samma modul |
public |
alla | alla | alla | alla |
open |
- | - | - | alla + underklass utanför modulen + åsidosätter utanför modulen |
Exempel i C ++
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
struct B { // default access modifier inside struct is public
void set_n(int v) { n = v; }
void f() { cout << "B::f" << endl; }
protected:
int m, n; // B::m, B::n are protected
private:
int x;
};
struct D : B {
using B::m; // D::m is public
int get_n() { return n; } // B::n is accessible here, but not outside
// int get_x() { return x; } // ERROR, B::x is inaccessible here
private:
using B::f; // D::f is private
};
int main() {
D d;
// d.x = 2; // ERROR, private
// d.n = 2; // ERROR, protected
d.m = 2; // protected B::m is accessible as D::m
d.set_n(2); // calls B::set_n(int)
cout << d.get_n() << endl; // output: 2
// d.f(); // ERROR, B::f is inaccessible as D::f
B& b = d; // b references d and "views" it as being type B
// b.x = 3; // ERROR, private
// b.n = 3; // ERROR, protected
// b.m = 3; // ERROR, B::m is protected
b.set_n(3); // calls B::set_n(int)
// cout << b.get_n(); // ERROR, 'struct B' has no member named 'get_n'
b.f(); // calls B::f()
return 0;
}
Referenser
Anteckningar
Bibliografi
- Mayo, Joseph (2002), C Sharp Unleashed , Sams publicering, ISBN 9780672321221