xem xét nỗ lực đầu tiên của tôi, một kiểu đơn giản trong F # như sau:Làm cách nào để triển khai đúng thuộc tính trong 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")
Bây giờ tôi thử nghiệm này qua C# (đối tượng này đã được tiếp xúc với một dự án C#, vì vậy rõ ràng C# ngữ nghĩa là mong muốn):
[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
được chỉ định đúng, F # Setter của tôi đang chạy, nhưng khẳng định thứ hai không thành công vì giá trị cơ bản của prop
không thay đổi. Điều này có ý nghĩa với tôi, bởi vì nếu tôi loại bỏ mutable
từ trường prop
, không có lỗi nào được tạo ra (và một là vì tôi đang cố gắng làm biến đổi giá trị). Tôi nghĩ tôi phải thiếu một khái niệm cơ bản.
Cách chính xác để rebind/mutate prop
trong lớp học Test
để tôi có thể vượt qua bài kiểm tra đơn vị của mình là gì?
Cảm ơn, @kvb. Không có gì làm cho tôi cảm thấy như một n00b ở ngôn ngữ hơn là một sửa chữa đơn giản như vậy. :) –
@Greg - không sao cả. Cách mà các ràng buộc và việc làm bóng có thể mất một chút để làm quen, đặc biệt là vì các ngôn ngữ khác làm việc khác nhau. Tuy nhiên, một khi bạn nhận được mô hình tinh thần của bạn thẳng, tôi nghĩ rằng sự sang trọng của cách tiếp cận F # trở nên rõ ràng. – kvb