Pääsyn muokkaajat - Access modifiers
Access modifiers (tai pääsy toimintomerkit ) ovat avainsanoja on olio-kielet , jotka asettavat saatavuutta luokkia, menetelmiä, ja muut jäsenet. Pääsyn muokkaajat ovat erityinen osa ohjelmointikielen syntaksia, jota käytetään komponenttien kapseloinnin helpottamiseen .
In C ++ , on vain kolme pääsy muokkaajia. C # laajentaa niiden lukumäärän kuuteen, kun taas Java: lla on neljä pääsynmuutosta, mutta kolme avainsanaa tähän tarkoitukseen. Java-ohjelmassa ei ole avainsanaa ennen oletusasetusta paketti-yksityinen muuttaja.
Kun luokka julistetaan julkiseksi, se on kaikkien muiden samassa paketissa määriteltyjen luokkien sekä muiden pakettien määriteltyjen luokkien käytettävissä. Tämä on yleisimmin käytetty luokkien määrittelijä. Itse luokkaa ei kuitenkaan voida julistaa yksityiseksi. Jos käyttöoikeuksien määrittäjää ei ilmoiteta, käytetään oletusarvoisia käyttörajoituksia. Luokkaan pääsevät muut samassa paketissa olevat luokat, mutta paketin ulkopuoliset luokat eivät voi käyttää sitä. Kun sanomme, että luokkaan ei pääse, se tarkoittaa yksinkertaisesti sitä, että emme voi luoda kyseisen luokan objektia tai julistaa kyseisen luokan tyyppistä muuttujaa. Myöskään suojattua pääsyn määrittelyä ei voida soveltaa luokkaan.
Avainsanojen nimet
C ++ käyttää kolmea muokkaajia nimeltään public , protected ja private . C # on muokkaajia public , protected , internal , private , protected internal , ja private protected . Java on public , package , protected , ja private . Pääsyn muokkaaja package on oletusarvo ja sitä käytetään, jos jokin muu pääsynmuuttaja-avainsana puuttuu. Näiden muokkaajien merkitys voi vaihdella kielittäin. Seuraavassa verrataan avainsanoja, jotka on järjestetty rajoittavimmista avoimimpiin, ja niiden merkitys näillä kolmella kielellä. Niiden näkyvyys vaihtelee samasta luokasta pakettiin, jossa luokka on määritelty, yleiseen käyttöoikeuteen. Alla taulukossa on suurin käyttöoikeus.
Swiftissä on viisi erilaista käyttöoikeustasoa suhteessa sekä lähdetiedostoon, jossa entiteetti on määritelty, että moduuliin, joka sisältää lähdetiedoston.
| Avainsana | C # | C ++ | Java | Nopea |
|---|---|---|---|---|
private |
luokassa | luokka- ja / tai ystäväluokat |
luokassa | liitetään vain ilmoitus + ilmoituksen laajennukset samaan tiedostoon |
fileprivate |
- | - | - | sama tiedosto |
private protected |
johdetut luokat samassa kokoonpanossa | - | - | - |
protected internal |
sama kokoonpano ja / tai johdetut luokat |
- | - | - |
protected |
johdetut luokat | johdetut luokat ja / tai ystäväluokat |
johdetut luokat ja / tai samassa paketissa |
- |
package |
- | - | sen pakkauksessa | - |
internal |
sama kokoonpano | - | - | sama moduuli |
public |
kaikki | kaikki | kaikki | kaikki |
open |
- | - | - | kaikki + aliluokan ulkopuolinen moduuli + ohittaa ulkopuolisen moduulin |
Esimerkki C ++: sta
#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;
}
Viitteet
Huomautuksia
Bibliografia
- Mayo, Joseph (2002), C Sharp Unleashed , Sams publishing, ISBN 9780672321221