Sdílet prostřednictvím


Ří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

Viz také

Další zdroje

Referenční dokumentace jazyka F#

Podpisy (F#)