Рассмотрим мою первую попытку, простой тип на 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")
Теперь я проверяю это через C # (этот объект открыт для проекта C #, поэтому очевидна семантика C #):
[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
назначен правильно, мой F # Setter работает, но второе утверждение не выполняется, поскольку базовое значение prop
не изменилось. Это имеет смысл для меня, потому что, если я удаляю mutable
из поля prop
, ошибка не генерируется (и это должно быть, потому что я пытаюсь изменить значение). Я думаю, что мне не хватает фундаментальной концепции.
Как правильно перевязать / изменить prop
в классе Test
, чтобы я мог пройти мой модульный тест?