Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A hozzáférés-vezérlés azt jelenti, hogy mely ügyfelek használhatnak bizonyos programelemeket, például típusokat, metódusokat és függvényeket.
A hozzáférés-vezérlés alapjai
Az F#-ban a hozzáférés-vezérlési azonosítók , internalés private alkalmazhatók publicmodulokra, típusokra, metódusokra, értékdefiníciókra, függvényekre, tulajdonságokra és explicit mezőkre.
publicazt jelzi, hogy az entitás minden hívó számára elérhető.internalazt jelzi, hogy az entitás csak ugyanabból a szerelvényből érhető el.privateazt jelzi, hogy az entitás csak a belefoglaló típusból vagy modulból érhető el.
Megjegyzés:
A hozzáférés-meghatározó protected nem használatos az F#-ban, bár elfogadható, ha olyan nyelveken írt típusokat használ, amelyek támogatják protected a hozzáférést. Ezért ha felülbírál egy védett metódust, a metódus csak az osztályon és a leszármazottakon belül marad elérhető.
A hozzáférés-meghatározó az entitás neve elé kerül.
Ha nem használ hozzáférési azonosítót, az alapértelmezett érték publica típushoz tartozó kötések kivételével let , amelyek mindig private a típushoz tartoznak.
Az F#-ban lévő aláírások egy másik mechanizmust biztosítanak az F# programelemekhez való hozzáférés szabályozásához. A hozzáférés-vezérléshez nem szükséges aláírás. További információ: Aláírások.
Hozzáférés-vezérlési szabályok
A hozzáférés-vezérlésre a következő szabályok vonatkoznak:
Az öröklési deklarációk (vagyis az osztály alaposztályának
inheritmegadása), a felületi deklarációk (vagyis annak meghatározása, hogy egy osztály egy felületet implementál), és az absztrakt tagok mindig ugyanolyan akadálymentességgel rendelkeznek, mint a beágyazási típus. Ezért ezeken a szerkezeteken nem használható hozzáférés-vezérlési meghatározó.A hátrányos megkülönböztetést alkalmazó unió egyes eseteinek hozzáférhetőségét maga a hátrányos megkülönböztetést alkalmazó unió akadálymentessége határozza meg. Vagyis egy adott uniós ügy nem kevésbé hozzáférhető, mint maga az unió.
A rekordtípus egyes mezőinek akadálymentességét maga a rekord akadálymentessége határozza meg. Vagyis egy adott rekordcímke nem kevésbé hozzáférhető, mint maga a rekord.
példa
Az alábbi kód bemutatja a hozzáférés-vezérlési azonosítók használatát. A projektben két fájl található, Module1.fs és Module2.fsa . Minden fájl implicit módon modul. Ezért két modul van, Module1 és Module2. A privát típus és a belső típus a következőben van definiálva Module1: . A privát típus nem érhető el innen Module2, de a belső típus igen.
// Module1.fs
module Module1
// This type is not usable outside of this file
type private MyPrivateType() =
// x is private since this is an internal let binding
let x = 5
// X is private and does not appear in the QuickInfo window
// when viewing this type in the Visual Studio editor
member private this.X() = 10
member this.Z() = x * 100
type internal MyInternalType() =
let x = 5
member private this.X() = 10
member this.Z() = x * 100
// Top-level let bindings are public by default,
// so "private" and "internal" are needed here since a
// value cannot be more accessible than its type.
let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()
// let bindings at the top level are public by default,
// so result1 and result2 are public.
let result1 = myPrivateObj.Z
let result2 = myInternalObj.Z
Az alábbi kód a létrehozott Module1.fstípusok akadálymentességét teszteli.
// Module2.fs
module Module2
open Module1
// The following line is an error because private means
// that it cannot be accessed from another file or module
// let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()
let result = myInternalObj.Z