How do I properly implement a property in F#?
Posted
by Greg D
on Stack Overflow
See other posts from Stack Overflow
or by Greg D
Published on 2010-04-02T14:56:26Z
Indexed on
2010/04/02
15:03 UTC
Read the original article
Hit count: 338
Consider my first attempt, a simple type in F# like the following:
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")
Now I test this via C# (this object is being exposed to a C# project, so apparent C# semantics are desirable):
[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
is properly assigned, my F# Setter is running, but the second assert is failing because the underlying value of prop
isn't changed. This sort of makes sense to me, because if I remove mutable
from the prop
field, no error is generated (and one should be because I'm trying to mutate the value). I think I must be missing a fundamental concept.
What's the correct way to rebind/mutate prop
in the Test
class so that I can pass my unit test?
© Stack Overflow or respective owner