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-typeNLe nom d'une interface commence par
Ipour suivre la convention .NETLes arguments des méthodes peuvent être nommés :
[<Interface>]
type IPrintable =
abstract member Print : format:string -> unitOn 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 endImplémentation
2 manières d'implémenter une interface :
Dans un type (comme en C♯)
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 ?