Bindingen in klassen toestaan
U kunt persoonlijke velden en privéfuncties voor F#-klassen definiëren met behulp van let
bindingen in de klassedefinitie.
Syntaxis
// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]
// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]
Opmerkingen
De vorige syntaxis wordt weergegeven na de declaraties van de klassekop en overname, maar vóór alle liddefinities. De syntaxis is vergelijkbaar met bindingen let
buiten klassen, maar de namen die in een klasse zijn gedefinieerd, hebben een bereik dat beperkt is tot de klasse. Met een let
binding wordt een privéveld of functie gemaakt. Als u gegevens of functies openbaar beschikbaar wilt maken, declareert u een eigenschap of een lidmethode.
Een let
binding die niet statisch is, wordt een exemplaarbinding let
genoemd. Exemplaarbindingen let
worden uitgevoerd wanneer objecten worden gemaakt. Statische let
bindingen maken deel uit van de statische initialisatiefunctie voor de klasse, die gegarandeerd wordt uitgevoerd voordat het type voor het eerst wordt gebruikt.
De code binnen exemplaarbindingen let
kan de parameters van de primaire constructor gebruiken.
Kenmerken en toegankelijkheidsaanpassingen zijn niet toegestaan voor let
bindingen in klassen.
In de volgende codevoorbeelden ziet u verschillende typen let
bindingen in klassen.
type PointWithCounter(a: int, b: int) =
// A variable i.
let mutable i = 0
// A let binding that uses a pattern.
let (x, y) = (a, b)
// A private function binding.
let privateFunction x y = x * x + 2 * y
// A static let binding.
static let mutable count = 0
// A do binding.
do count <- count + 1
member this.Prop1 = x
member this.Prop2 = y
member this.CreatedCount = count
member this.FunctionValue = privateFunction x y
let point1 = PointWithCounter(10, 52)
printfn "%d %d %d %d" (point1.Prop1) (point1.Prop2) (point1.CreatedCount) (point1.FunctionValue)
De uitvoer is als volgt.
10 52 1 204
Alternatieve manieren om velden te maken
U kunt ook het val
trefwoord gebruiken om een privéveld te maken. Wanneer u het val
trefwoord gebruikt, krijgt het veld geen waarde wanneer het object wordt gemaakt, maar wordt in plaats daarvan geïnitialiseerd met een standaardwaarde. Zie Expliciete velden: Het trefwoord val voor meer informatie.
U kunt ook privévelden in een klasse definiëren met behulp van een liddefinitie en het trefwoord private
toevoegen aan de definitie. Dit kan handig zijn als u verwacht dat u de toegankelijkheid van een lid wijzigt zonder uw code opnieuw te schrijven. Zie Toegangsbeheer voor meer informatie.