Tenir compte de ma première tentative, un type simple F # comme ce qui suit:Comment implémenter correctement une propriété dans F #?
type Test() =
inherit BaseImplementingNotifyPropertyChangedViaOnPropertyChanged()
let mutable prop: string = null
member this.Prop
with public get() = prop
and public set value =
match value with
| _ when value = prop ->()
| _ ->
let prop = value
this.OnPropertyChanged("Prop")
Maintenant, je teste ce via C# (cet objet est exposé à un projet C#, donc apparemment sémantique C# sont souhaitables):
[TestMethod]
public void TaskMaster_Test()
{
var target = new FTest();
string propName = null;
target.PropertyChanged += (s, a) => propName = a.PropertyName;
target.Prop = "newString";
Assert.AreEqual("Prop", propName);
Assert.AreEqual("newString", target.Prop);
return;
}
propName
est correctement affecté, mon F # Setter est en cours d'exécution, mais le second est assert défaillantes en raison de la valeur sous-jacente de prop
ne change pas. Ce genre de sens a du sens pour moi, parce que si je supprime mutable
du champ prop
, aucune erreur n'est générée (et il faut le faire parce que j'essaie de muter la valeur). Je pense qu'il me manque un concept fondamental.
Quelle est la bonne façon de relier/muter prop
dans la classe Test
afin que je puisse passer mon test d'unité?
Merci, @kvb. Rien ne me fait sentir comme un n00b à la langue d'une solution aussi simple que cela. :) –
@Greg - pas de problème. La façon dont les fixations et le travail de duplication peuvent prendre un peu de temps à s'habituer, d'autant plus que d'autres langages font les choses différemment. Cependant, une fois que vous obtenez votre modèle mental droit, je pense que l'élégance de l'approche de F # devient évidente. – kvb