प्रिय सभी, इस तरह का सवाल already asked रहा है, लेकिन उत्तरों में से जो समस्या मैं देखता हूं उसका कोई स्पष्टीकरण नहीं था।स्टेटिक कन्स्ट्रक्टर उदाहरण के बाद कन्स्ट्रक्टर कहा जाता है?
समस्या: C# Programming Guide का कहना है:
एक स्थिर निर्माता किसी भी स्थिर डेटा प्रारंभ करने, या किसी ख़ास कार्य है कि एक बार ही किया जाता जरूरत प्रदर्शन करने के लिए प्रयोग किया जाता है। इसे पहले उदाहरण के निर्माण से पहले स्वचालित रूप से कहा जाता है या किसी स्थिर सदस्यों का संदर्भ दिया जाता है।
विशेष रूप से, कक्षा के किसी भी उदाहरण से पहले स्थिर निर्माता को बुलाया जाता है। (इससे यह सुनिश्चित नहीं है कि स्थिर निर्माता उदाहरण के सृजन से पहले खत्म, लेकिन यह एक अलग कहानी है।)
के उदाहरण कोड पर विचार करें:
using System;
public class Test
{
static public Test test = new Test();
static Test()
{
Console.WriteLine("static Test()");
}
public Test()
{
Console.WriteLine("new Test()");
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Main() started");
Console.WriteLine("Test.test = " + Test.test);
Console.WriteLine("Main() finished");
}
}
यह आउटपुट:
मुख्य() शुरू कर दिया
नया टेस्ट()
स्थिर टेस्ट()
Test.test = टेस्ट
मुख्य() समाप्त
तो हम से पहले स्थिर निर्माता शुरू होता देख सकते हैं कि उदाहरण के निर्माता खत्म (और इस प्रकार एक उदाहरण बन जाता है) । क्या यह गाइड का विरोध नहीं करता है? हो सकता है कि स्थैतिक क्षेत्रों की शुरुआत स्थिर कन्स्ट्रक्टर का एक निहित हिस्सा माना जाता है?
आप वास्तव में कक्षा के बाहर इसे स्थिर संपत्ति के उदाहरण को आवंटित क्यों नहीं करते हैं, फिर ऑर्डर जांचें? यह मुझे परीक्षण करने के लिए एक भयानक तरीका की तरह दिखता है। – mway
ऐसा नहीं है क्योंकि आप 'स्थिर' सदस्य को तत्काल कर रहे हैं ...? – rsenna
@mway: यह अन्य तरीकों से काम कर सकता है, लेकिन मैं समझना चाहता हूं कि इस मामले में क्या होता है। – Vlad