Řízení přístupu (F#)
Řízení přístupu k odkazuje na deklaraci, které klienti mohou používat určité prvky programu, například typy, metody a funkce.
Základy řízení přístupu
F# řídit přístup specifikátory public, internal, a private lze použít moduly, typů, metod, definice hodnotu, funkce, vlastnosti a explicitní polí.
publicoznačuje, že subjekt přístupné všem volajícím.
internaloznačuje subjekt je přístupná pouze ze stejné sestavení.
privateoznačuje subjekt je přístupná pouze z nadřazeného typu nebo modulu.
[!POZNÁMKA]
Specifikátor přístupu protected je přijatelné, pokud používáte typy vytvořené v jazycích, které podporují není použit v F# protected přístup.Proto pokud potlačíte chráněná metoda metodu zůstane přístupné pouze v rámci třídy a jeho podřízených adresářů.
Obecně je umístit specifikátor z název entity, kromě případů, kdy mutable nebo inline slouží indikátor, který se zobrazí po specifikátor ovládání přístupu.
Pokud je použit žádný specifikátor přístupu, výchozí hodnota je public, s výjimkou let v typu vazby, které jsou vždy private typu.
Podpisy v F# zadat jiný mechanismus pro řízení přístupu k prvkům programu F#.Podpisy nejsou požadovány pro řízení přístupu.Další informace naleznete v tématu Podpisy (F#).
Pravidla pro řízení přístupu
Řízení přístupu se vztahují následující pravidla:
Dědičnost prohlášení (, použití inherit určit základní třídu pro třídu), rozhraní prohlášení, (které je, určující, že třída implementuje rozhraní) a abstraktní členové mají vždy stejnou dostupnost jako nadřazeného typu.Proto nelze použít specifikátor řízení přístupu na tyto konstrukce.
Jednotlivé případy discriminated unie nemůže mít vlastní ovládací prvek modifikátory přístupu odděleně od typu union.
Jednotlivá pole Typ záznamu nemůže mít vlastní ovládací prvek modifikátory přístupu nezávisle na typu záznamu.
Příklad
Následující kód ilustruje použití specifikátorů ovládání přístupu.Existují dva soubory v projektu, Module1.fs a Module2.fs.Každý soubor je implicitně modulu.Proto jsou dva moduly Module1 a Module2.Typ soukromého a vnitřního typu jsou definovány v Module1.Typ soukromého nelze přistupovat z Module2, ale můžete vnitřního typu.
// 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
Následující kód testuje usnadnění typů vytvořené v Module1.fs.
// 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