कैसे सी #, या उस बात के लिए अन्य भाषाओं, स्मृति आवंटन (और स्मृति de-आवंटन) इन दो स्थितियों के बीच संभाल करता है:सी # वर्ग उदाहरण
1.) पर एक विधि एक स्थिर वर्ग का आह्वान किया जाता है।
public Program {
Foo foo = Loader.load();
}
public static Loader {
public static Foo load() {
return new Foo();
}
}
2.) एक उदाहरण पर एक विधि लागू की जाती है, जो तब दायरे से बाहर हो जाती है।
public Program {
Foo foo = new Loader().load();
}
public Loader {
public Foo load() {
return new Foo();
}
}
मुझे लगता है स्थिर वर्ग भरी हुई है, और स्मृति में रहता है,; जबकि कक्षा का उदाहरण सी # के अवकाश पर कचरा संग्रह के लिए सफल होता है। क्या इन दो प्रतिमानों के लिए कोई पेशेवर या विपक्ष है? क्या कभी ऐसा समय होता है जब आपके पास ऐसी कक्षा होती है जिसे कभी भी तत्काल होने की आवश्यकता नहीं होती है (यानी कुछ प्रकार के संसाधन लोडर या फैक्ट्री), लेकिन कचरा संग्रह का लाभ उठाने के लिए आप दूसरी पद्धति का उपयोग करते हैं?
मेरे प्रश्न का महत्वपूर्ण हिस्सा यह है कि पहले परिस्थिति में, कुछ परिस्थितियों में अवधारणात्मक रूप से सही होने पर, अनावश्यक रूप से स्मृति को पकड़ने से पीड़ित हो सकता है।
दूसरा उदाहरण मेरे लिए गलत लगता है। एक स्थिर विधि को कॉल करने के लिए कक्षा वर्ग के साथ उपसर्ग करना आवश्यक है। जैसे 'लोडर। लोड()' और ** नहीं ** 'नया लोडर() लोड()' – shahkalpesh
आप सही हैं, शाह - आपको एक स्थिर विधि को कॉल करने के लिए एक उदाहरण की आवश्यकता नहीं है। यह थोड़े बिंदु है :) –
आह, आप लोग सही हैं, धन्यवाद, मैंने सवाल के मांस पर पहुंचने के लिए इसे दोबारा लिखा है जिसे मैं पूछने का प्रयास कर रहा था। – jtb