पर NullReferenceException
के साथ निम्न क्रैश क्यों होता है?मूल्यांकन के सदस्य संदर्भ और असाइनमेंट ऑर्डर
class A {
public B b;
}
class B {
public int c;
public int other, various, fields;
}
class Program {
private static int LazyInitBAndReturnValue(A a)
{
if (a.b == null)
a.b = new B();
return 42;
}
static void Main(string[] args)
{
A a = new A();
a.b.c = LazyInitBAndReturnValue(a);
a.b.other = LazyInitBAndReturnValue(a);
a.b.various = LazyInitBAndReturnValue(a);
a.b.fields = LazyInitBAndReturnValue(a);
}
}
असाइनमेंट भाव from right to left मूल्यांकन किया जाता है, जब तक हम a.b.c
को बताए जाते हैं द्वारा हां, तो a.b
शून्य नहीं होना चाहिए। विचित्र रूप से पर्याप्त, जब अपवाद पर डीबगर टूट जाता है, तो यह भी गैर-शून्य मूल्य के आरंभ में a.b
दिखाता है।
'b' को' a.b.c' में संदर्भित किया गया है, इससे पहले इसे 'LazyInitB ...() 'में प्रारंभ किया गया है। – ja72
टिप्पणी करने से पहले जवाब पढ़ें, डीबगर व्यवहार ऐसा होने से कहीं अधिक जटिल दिखाना प्रतीत होता है। – SamStephens