2009-11-05 7 views
3
type IFooable = 
    abstract Foo : int -> int 

type IFooable2 = 
    abstract Foo : a : int -> int 

type MyClass() = 
    interface IFooable2 with 
     member this.Foo(b) = 7 

Quelle est la différence entre IFooable et IFooable2? Sont-ils équivalents? Quel est le but dans le cas de mon exemple? Quand l'utiliser?Différence entre ces deux syntaxes

Répondre

4

IFooable2 nomme son paramètre; IFooable ne le fait pas.

Cela est important lorsque les systèmes réfléchissent sur les noms de paramètres. Par exemple, lorsque vous utilisez WCF avec un type d'interface balisé avec ServiceContractAttribute, par défaut, WCF utilise les noms de paramètres dans l'interface pour contrôler les noms qui apparaissent dans la projection XML des données sur le réseau. Ceci concerne également l'outillage, par exemple, référence ce code F # de C#, déclare une variable de chaque type, et regarde les info-bulles IntelliSense sur chaque méthode.

Je vous recommande de toujours déclarer le nom du paramètre (préférez la deuxième version).

Questions connexes