İlk denememi düşünün, F # içinde aşağıdaki gibi basit bir tür:F # içinde bir özelliği düzgün bir şekilde nasıl uygularım?
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")
Şimdi bunu C# ile test ediyorum (bu nesne C# projesine maruz kalıyor, bu yüzden görünen C# semantikleri arzu ediliyor):
[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
düzgün şekilde atanmış, F # Setter'ım çalışıyor, ancak ikinci assert başarısız oluyor çünkü prop
'un temel değeri değişmiyor. Bu tür bir şey bana mantıklı geliyor, çünkü mutable
alanını prop
alanından kaldırırsam, hata oluşmaz (ve değeri değiştirmeye çalıştığım için bir tane olması gerekir). Sanırım temel bir kavram eksik olmalıyım.
Test
sınıfında prop
değerini tekrarlamak/mutasyona sokmanın doğru yolu nedir, böylece birim testimi geçebilir miyim?
Teşekkür, @kvb. Hiçbir şey bana dilde bir n00b gibi hissettiriyor, bu kadar basit bir düzeltme değil. :) –
@Greg - sorun değil. Bağlamaların ve gölgelenme çalışmalarının alışması biraz zaman alabilir, özellikle de diğer diller çok farklı şeyler yapar. Ancak, zihinsel modelinizi düzelttikten sonra, F'nin yaklaşımının zerafetinin belirgin olduğunu düşünüyorum. – kvb