कक्षाएं संदर्भ प्रकार हैं और संरचनाएं मान प्रकार हैं।
जब मैं कहता हूं कि कक्षाएं संदर्भ प्रकार हैं,
मूल रूप से उनमें एक उदाहरण चर का पता होगा।
उदाहरण के लिए:
Class MyClass
{
Public Int DataMember; //By default, accessibility of class data members
//will be private. So I am making it as Public which
//can be accessed outside of the class.
}
मुख्य विधि में,
मैं नए ऑपरेटर का उपयोग करके इस वर्ग का एक उदाहरण बना सकता हूं जो इस वर्ग के लिए मेमोरी आवंटित करता है
और उस के आधार पते को MyClass प्रकार चर (_myClassObject2) में संग्रहीत करता है।
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
उपरोक्त कार्यक्रम में, MyClass _myClassObject2 = _myClassObject1; निर्देश बताता है कि दोनों प्रकार के प्रकार MyClass
- myClassObject1
- myClassObject2
और उसी मेमोरी लोकेशन की ओर इशारा करेगा।
यह मूल रूप से उसी मेमोरी लोकेशन को उसी प्रकार के दूसरे वेरिएबल में असाइन करता है।
इसलिए यदि हम किसी भी प्रकार की किसी भी वस्तु में बदलाव करते हैं तो MyClass का दूसरे पर प्रभाव पड़ेगा
क्योंकि दोनों एक ही मेमोरी लोकेशन की ओर इशारा करते हैं।
"_myClassObject1.DataMember = 10;" इस पंक्ति में दोनों ऑब्जेक्ट के डेटा सदस्यों में 10 का मान होगा।
"_myClassObject2.DataMember = 20;" इस पंक्ति में दोनों ऑब्जेक्ट के डेटा सदस्य में 20 का मान होगा।
आखिरकार, हम पॉइंटर्स के माध्यम से किसी ऑब्जेक्ट के डेटाटैमर्स तक पहुंच रहे हैं।
कक्षाओं के विपरीत, संरचनाएं मूल्य प्रकार हैं। उदाहरण के लिए:
Structure MyStructure
{
Public Int DataMember; //By default, accessibility of Structure data
//members will be private. So I am making it as
//Public which can be accessed out side of the structure.
}
Static Public void Main (string[] arg)
{
MyStructure _myStructObject1 = new MyStructure();
_myStructObject1.DataMember = 10;
MyStructure _myStructObject2 = _myStructObject1;
_myStructObject2.DataMember = 20;
}
उपरोक्त कार्यक्रम में,
नए ऑपरेटर का उपयोग करके MyStructure प्रकार की वस्तु को इंस्टेंट करना और
MyStructure के _myStructObject चर में पते को संग्रहीत करना और
"_myStructObject1.DataMember = 10" का उपयोग करके संरचना के डेटा सदस्य को मान 10 असाइन करना।
अगली पंक्ति में,
मैं MyStructure प्रकार का एक और चर _myStructObject2 घोषित कर रहा हूं और उस में _myStructObject1 असाइन कर रहा हूं।
यहाँ .NET C # कंपाइलर _myStructureObject1 ऑब्जेक्ट की एक और कॉपी बनाता है और
उस मेमोरी लोकेशन को MyStructure वेरिएबल _myStructObject2 में असाइन करता है।
इसलिए हम जो कुछ भी बदलाव करते हैं _ _StructObject1 पर एक और परिवर्तन नहीं होगा, वह MyStructrue के अन्य चर _myStructObject2 पर असर करेगा।
इसलिए हम कह रहे हैं कि संरचनाएं मूल्य प्रकार हैं।
तो क्लास के लिए तत्काल बेस क्लास ऑब्जेक्ट है और स्ट्रक्चर के लिए तत्काल बेस क्लास वैल्यू टाइप है जो ऑब्जेक्ट से विरासत में मिला है।
कक्षाएं एक विरासत का समर्थन करेंगी जबकि संरचनाएं नहीं होंगी।
हम यह कैसे कह रहे हैं?
और उसके पीछे क्या कारण है?
इसका जवाब है क्लासेस।
यह सार, सील, स्थिर और आंशिक हो सकता है और निजी, संरक्षित और संरक्षित आंतरिक नहीं हो सकता है।