मेरे पहले प्रयास पर विचार करें, एफ # में एक साधारण प्रकार निम्न जैसा है:मैं एफ # में एक संपत्ति को सही ढंग से कैसे कार्यान्वित करूं?
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")
अब मैं इसे सी # के माध्यम से जांचता हूं (इस ऑब्जेक्ट को सी # प्रोजेक्ट के संपर्क में लाया जा रहा है, इसलिए स्पष्ट सी # अर्थशास्त्र वांछनीय हैं):
[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
ठीक से असाइन किया गया है, मेरा एफ # सेटर चल रहा है, लेकिन दूसरा जोर विफल रहा है क्योंकि prop
का अंतर्निहित मान नहीं बदला गया है। इस प्रकार का मुझे समझ में आता है, क्योंकि अगर मैं prop
फ़ील्ड से mutable
को हटाता हूं, तो कोई त्रुटि उत्पन्न नहीं होती है (और एक होना चाहिए क्योंकि मैं मान को म्यूट करने की कोशिश कर रहा हूं)। मुझे लगता है कि मुझे एक मौलिक अवधारणा याद आ रही है।
Test
कक्षा में prop
को पुनर्निर्मित/परिवर्तित करने का सही तरीका क्या है ताकि मैं अपना यूनिट परीक्षण पास कर सकूं?
धन्यवाद, @kvb। कुछ भी मुझे इस तरह के एक फिक्स की तुलना में भाषा में n00b की तरह महसूस नहीं करता है। :) –
@ ग्रेग - कोई समस्या नहीं। जिस तरह से बाइंडिंग और छायांकन कार्य का उपयोग करने में थोड़ा सा समय लग सकता है, खासकर जब से अन्य भाषाएं अलग-अलग चीजें करती हैं। हालांकि, एक बार जब आप अपना मानसिक मॉडल सीधे प्राप्त कर लेते हैं, तो मुझे लगता है कि एफ # के दृष्टिकोण का लालित्य स्पष्ट हो जाता है। – kvb