Interface

Syntaxe

Idem classe abstraite avec :

  • Que des membres abstraits, définis par leur signature

  • Sans l'attribut [<AbstractClass>]

  • Avec l'attribut [<Interface>] de manière optionnelle

type [accessibility-modifier] interface-name =
    abstract memberN : [ argument-typesN -> ] return-typeN
  • Le nom d'une interface commence par I pour suivre la convention .NET

  • Les arguments des méthodes peuvent être nommés :

[<Interface>]
type IPrintable =
    abstract member Print : format:string -> unit

On peut aussi utiliser la syntaxe verbeuse avec un bloc interface ... end, → Non idiomatique sauf dans le cas d'une interface sans membre a.k.a marker interface.

type IMarker = interface end

Implémentation

2 manières d'implémenter une interface :

  1. Dans un type (comme en C♯)

  2. Dans une expression objet 📍

Dans un type

⚠️ Piège : mot clé interface en F♯ ≠ mot clé interface en C♯, Java, TS ≡ mot clé implements Java, TS

Dans une expression objet

Implémentation par défaut

F♯ 5.0 supporte les interfaces définissant des méthodes avec implémentations par défaut écrites en C♯ 8+ mais ne permet pas de les définir.

⚠️ Mot clé default : supporté que dans les classes, pas dans les interfaces !

Une interface F♯ est explicite

Implémentation d'une interface en F♯ ≡ Implémentation explicite d'une interface en C♯

→ Les méthodes de l'interface ne sont consommables que par upcasting :

Implémenter une interface générique

Héritage

Défini avec mot clé inherit

Mis à jour

Ce contenu vous a-t-il été utile ?