Delen via


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.

Zie ook