ऐसा लगता है कि यह लाइनों के अनुक्रम पर निर्भर करता है। इस कोड काम करता है:
static private List<int> a = new List<int>() { 1 };
static private List<int> b = new List<int>() { a[0] };
जबकि इस कोड (यह एक NullReferenceException
फेंकता)
static private List<int> a = new List<int>() { b[0] };
static private List<int> b = new List<int>() { 1 };
तो काम नहीं करता है, स्पष्ट रूप से चक्रीय निर्भरता के लिए कोई नियम मौजूद हैं। क्या "फ़ाइलों में" हो रहा है - यह अजीब लेकिन है कि संकलक शिकायत नहीं करता है ...
संपादित है? हम इन दो वर्गों यह घोषणा करते हैं:
public class A {
public static List<int> a = new List<int>() { B.b[0] };
}
public class B {
public static List<int> b = new List<int>() { A.a[0] };
}
और इस कोड के साथ उन तक पहुँचने का प्रयास करें:
try { Console.WriteLine(B.b); } catch (Exception e) { Console.WriteLine(e.InnerException.Message.); }
try { Console.WriteLine(A.a); } catch (Exception e) { Console.WriteLine(e.InnerException.Message); }
try { Console.WriteLine(B.b); } catch (Exception e) { Console.WriteLine(e.InnerException.Message); }
हम इस उत्पादन हो रही है:
The type initializer for 'A' threw an exception.
Object reference not set to an instance of an object.
The type initializer for 'A' threw an exception.
तो B
का प्रारंभ एक का कारण बनता है स्थिर कन्स्ट्रक्टर A
में अपवाद और डिफ़ॉल्ट मान (शून्य) के साथ lefts फ़ील्ड a
। चूंकि a
null
है, b
को भी ठीक से प्रारंभ नहीं किया जा सकता है।
यदि हमारे पास चक्रीय निर्भरता नहीं है, तो सब कुछ ठीक काम करता है।
संपादित करें: बस मामले में आप टिप्पणियां पढ़ें नहीं किया था, Jon Skeet एक बहुत ही दिलचस्प पढ़ने प्रदान करता है: The differences between static constructors and type initializers।
मुझे लगता है कि फाइलों (यानी विभिन्न वर्गों में) यह वही होगा। कक्षा ए के प्रारंभिक प्रकार के दौरान, कक्षा बी को प्रारंभ करने के लिए कहा जाएगा, और कक्षा बी को कक्षा ए – Panos
के लिए एक संक्षिप्त संदर्भ मिलेगा, अब, एक ही कक्षा (आंशिक वर्ग) की फाइलों में, शायद पूर्व-प्रोसेसर तक है निर्धारित करें कि यह विफल रहता है या नहीं। – Panos
तो यदि कोई संदर्भ बीबी है तो एए प्राप्त हो जाएगा बीबी टक्कर लगी होगी? – BCS