.NET Framework
ढेर और ढेर
खोज…
टिप्पणियों
यह ध्यान देने योग्य है कि एक संदर्भ प्रकार की घोषणा करने पर, इसका प्रारंभिक मूल्य null
होगा। ऐसा इसलिए है क्योंकि यह अभी तक स्मृति में किसी स्थान को इंगित नहीं करता है, और पूरी तरह से मान्य स्थिति है।
हालांकि, अशक्त प्रकारों के अपवाद के साथ, मूल्य प्रकारों में आम तौर पर हमेशा एक मूल्य होना चाहिए।
उपयोग में मूल्य प्रकार
मान प्रकार में केवल एक मान होता है ।
सभी मान प्रकार System.ValueType वर्ग से प्राप्त होते हैं, और इसमें अधिकांश निर्मित प्रकार शामिल होते हैं।
एक नया मान प्रकार बनाते समय, मेमोरी के एक क्षेत्र को स्टैक कहा जाता है।
घोषित प्रकार से आकार के अनुसार ढेर बढ़ता जाएगा। इसलिए, उदाहरण के लिए, एक इंट को हमेशा स्टैक पर 32 बिट मेमोरी आवंटित किया जाएगा। जब मान प्रकार अब दायरे में नहीं होता है, तो स्टैक पर स्थित स्थान को हटा दिया जाएगा।
नीचे दिया गया कोड एक नए चर को सौंपा जा रहा मान प्रकार प्रदर्शित करता है। कस्टम मूल्य प्रकार बनाने के लिए एक सुविधाजनक तरीके के रूप में एक संरचना का उपयोग किया जा रहा है (System.ValueType वर्ग अन्यथा विस्तारित नहीं किया जा सकता है)।
समझने के लिए महत्वपूर्ण बात यह है कि जब एक मूल्य प्रकार निर्दिष्ट करते हैं, तो मूल्य को नए चर में कॉपी किया जाता है, जिसका अर्थ है कि हमारे पास वस्तु के दो अलग-अलग उदाहरण हैं, जो एक दूसरे को प्रभावित नहीं कर सकते हैं।
struct PersonAsValueType
{
public string Name;
}
class Program
{
static void Main()
{
PersonAsValueType personA;
personA.Name = "Bob";
var personB = personA;
personA.Name = "Linda";
Console.WriteLine( // Outputs 'False' - because
object.ReferenceEquals( // personA and personB are referencing
personA, // different areas of memory
personB));
Console.WriteLine(personA.Name); // Outputs 'Linda'
Console.WriteLine(personB.Name); // Outputs 'Bob'
}
}
उपयोग में संदर्भ प्रकार
संदर्भ प्रकार एक मेमोरी क्षेत्र के संदर्भ और उस क्षेत्र में संग्रहीत एक मान दोनों से युक्त होते हैं।
यह C / C ++ में संकेत के अनुरूप है।
सभी संदर्भ प्रकारों को संग्रहीत किया जाता है जिसे ढेर के रूप में जाना जाता है ।
ढेर बस स्मृति का एक प्रबंधित क्षेत्र है जहां वस्तुओं को संग्रहीत किया जाता है। जब किसी नई वस्तु को त्वरित किया जाता है, तो उस वस्तु के उपयोग के लिए ढेर का एक हिस्सा आवंटित किया जाएगा और ढेर के उस स्थान का एक संदर्भ वापस कर दिया जाएगा। कचरे के संग्रहकर्ता द्वारा ढेर का प्रबंधन और रखरखाव किया जाता है, और मैनुअल हस्तक्षेप की अनुमति नहीं देता है।
उदाहरण के लिए आवश्यक मेमोरी स्पेस के अलावा, .NET QCR द्वारा आवश्यक अतिरिक्त अस्थायी जानकारी के साथ, संदर्भ को संग्रहीत करने के लिए अतिरिक्त स्थान की आवश्यकता होती है।
नीचे दिए गए कोड एक संदर्भ प्रकार को एक नए चर को सौंपा जा रहा है। इस उदाहरण में, हम एक वर्ग का उपयोग कर रहे हैं, सभी वर्ग संदर्भ प्रकार हैं (भले ही स्थिर हों)।
जब एक संदर्भ प्रकार दूसरे चर को सौंपा जाता है, तो यह उस वस्तु का संदर्भ होता है जिसे कॉपी किया जाता है, न कि मूल्य। यह मूल्य प्रकार और संदर्भ प्रकारों के बीच एक महत्वपूर्ण अंतर है।
इसके निहितार्थ यह हैं कि अब हमारे पास एक ही वस्तु के दो संदर्भ हैं।
उस वस्तु के मूल्यों में कोई भी परिवर्तन दोनों चर द्वारा परिलक्षित होगा।
class PersonAsReferenceType
{
public string Name;
}
class Program
{
static void Main()
{
PersonAsReferenceType personA;
personA = new PersonAsReferenceType { Name = "Bob" };
var personB = personA;
personA.Name = "Linda";
Console.WriteLine( // Outputs 'True' - because
object.ReferenceEquals( // personA and personB are referencing
personA, // the *same* memory location
personB));
Console.WriteLine(personA.Name); // Outputs 'Linda'
Console.WriteLine(personB.Name); // Outputs 'Linda'
}