यह गहन ट्यूटोरियल स्टेटमेंट और वर्चुअल मेथड का उपयोग करके C# के बारे में सब कुछ समझाता है। आप सार और आभासी तरीकों के बीच अंतर भी जानेंगे:
उपयोग ब्लॉक मुख्य रूप से संसाधनों के प्रबंधन में मदद करता है, यह सिस्टम को वस्तु के दायरे और इसकी संसाधन आवश्यकता को निर्दिष्ट करके अपने संसाधनों का प्रबंधन करने की अनुमति देता है।
नेट फ्रेमवर्क गारबेज कलेक्टर का उपयोग करने वाली वस्तुओं के लिए संसाधन प्रबंधन के लिए अलग-अलग तरीके प्रदान करता है। इसका मतलब है कि आपको मेमोरी ऑब्जेक्ट को स्पष्ट रूप से आवंटित करने और निकालने की आवश्यकता नहीं है। किसी भी अप्रबंधित ऑब्जेक्ट के लिए क्लीनिंग ऑपरेशन डिस्ट्रक्टर का उपयोग करके नियंत्रित किया जाएगा।
प्रोग्रामर्स को इसे प्राप्त करने में मदद करने के लिए, C# स्टेटमेंट का उपयोग करके ऑब्जेक्ट के विनाश के लिए एक शर्त प्रदान करता है।
3
ऑब्जेक्ट के स्वत: विनाश को प्राप्त करने के लिए, C# एक निपटान विधि प्रदान करता है जिसे ऑब्जेक्ट की आवश्यकता नहीं होने पर कॉल किया जा सकता है। C# में उपयोग कथन वस्तु के अस्तित्व के लिए एक सशर्त सीमा को परिभाषित करता है। एक बार जब निष्पादन अनुक्रम उपयोग सीमा को छोड़ देता है, तो नेट फ्रेमवर्क को पता चल जाएगा कि उस वस्तु को नष्ट करने का समय आ गया है। C # स्टेटमेंट का उपयोग करने से प्रोग्रामर को एक स्टेटमेंट में कई संसाधनों को लागू करने की अनुमति मिलती है। उपयोग कोड ब्लॉक के अंदर परिभाषित सभी वस्तुओं को आईडीस्पोजेबल इंटरफ़ेस को लागू करना चाहिए, और यह ढांचे को निपटाने के लिए कॉल करने की अनुमति देता हैएक बार बाहर निकलने के बाद स्टेटमेंट के अंदर निर्दिष्ट वस्तुओं के लिए तरीके।
उदाहरण
स्टेटमेंट्स का उपयोग एक प्रकार के साथ जोड़ा जा सकता है जो आईडीस्पोजेबल को लागू कर सकता है जैसे कि StreamWriter, StreamReader, आदि। .
आइए एक सरल कार्यक्रम पर एक नजर डालते हैं:
public class Program { public static void Main(string[] args) { using (SysObj so = new SysObj()) { Console.WriteLine("Inside using statement"); } Console.WriteLine("Outside of the using statement block"); } } class SysObj : IDisposable { public void Dispose() { Console.WriteLine("Dispose method"); } }
आउटपुट
उपरोक्त का आउटपुट प्रोग्राम:
इनसाइड यूजिंग स्टेटमेंट
डिस्पोज मेथड
यूजिंग स्टेटमेंट ब्लॉक के बाहर
एक्सप्लेनेशन
उपरोक्त उदाहरण में, जब प्रोग्राम निष्पादित किया जाता है, तो पहले "SysObj" उदाहरण मेमोरी हीप में आवंटित किया जाता है। फिर उपयोग ब्लॉक निष्पादित करना शुरू कर देता है और उस आउटपुट को प्रिंट करता है जिसे हमने कंसोल के अंदर परिभाषित किया था। इसके बाद, जैसे ही यूजिंग स्टेटमेंट ब्लॉक खत्म हो जाता है, निष्पादन को तुरंत निपटान विधि में स्थानांतरित कर दिया जाता है।
फिर कोड स्टेटमेंट ब्लॉक से बाहर निकलता है और बाहरी स्टेटमेंट को कंसोल पर प्रिंट करता है।
C# वर्चुअल तरीका
वर्चुअल तरीका क्या है?
वर्चुअल मेथड एक क्लास मेथड है जो प्रोग्रामर को डिराइव्ड क्लास में उसी सिग्नेचर वाली मेथड को ओवरराइड करने की कार्यक्षमता प्रदान करता है। आभासी विधियों का उपयोग मुख्य रूप से OOPs वातावरण में बहुरूपता करने के लिए किया जाता है।
एक आभासी विधि का व्युत्पन्न और आधार वर्ग दोनों में कार्यान्वयन हो सकता है। यह मुख्य रूप से तब उपयोग किया जाता है जब एक उपयोगकर्ता को व्युत्पन्न वर्ग में अधिक कार्यक्षमता की आवश्यकता होती है।
एक आभासी विधि पहले आधार वर्ग में बनाई जाती है और फिरव्युत्पन्न वर्ग में ओवरराइड किया गया। "वर्चुअल" कीवर्ड का उपयोग करके बेस क्लास में एक वर्चुअल विधि बनाई जा सकती है और उसी विधि को "ओवरराइड" कीवर्ड का उपयोग करके व्युत्पन्न क्लास में ओवरराइड किया जा सकता है।
वर्चुअल तरीके: याद रखने के लिए कुछ बिंदु
- डिराइव्ड क्लास में वर्चुअल मेथड में वर्चुअल कीवर्ड होता है और डिराइव्ड क्लास में मेथड में ओवरराइड कीवर्ड होना चाहिए।
- अगर किसी मेथड को बेस क्लास में वर्चुअल मेथड घोषित किया जाता है , तो व्युत्पन्न वर्ग द्वारा हमेशा उस विधि को ओवरराइड करने की आवश्यकता नहीं होती है यानी व्युत्पन्न कक्षा में वर्चुअल विधि को ओवरराइड करना वैकल्पिक होता है।
- यदि किसी विधि की आधार और व्युत्पन्न कक्षा दोनों में समान परिभाषा है तो यह नहीं है विधि को ओवरराइड करने की आवश्यकता है। ओवरराइड केवल तभी आवश्यक है जब दोनों की एक अलग परिभाषा हो।
- ओवरराइडिंग विधि हमें एक ही विधि के लिए एक से अधिक रूपों का उपयोग करने की अनुमति देती है, इसलिए यह बहुरूपता भी दिखाती है।
- सभी विधियां गैर हैं -डिफ़ॉल्ट रूप से वर्चुअल।
- निजी, स्थिर, या सार संशोधक के साथ एक वर्चुअल संशोधक का उपयोग नहीं किया जा सकता है।
सी # में वर्चुअल कीवर्ड का उपयोग क्या है?
C# में वर्चुअल कीवर्ड का उपयोग आवश्यकता के आधार पर इसकी व्युत्पन्न कक्षा में बेस क्लास सदस्य को ओवरराइड करने के लिए किया जाता है। विधि उसी हस्ताक्षर के साथ जिसे व्युत्पन्न वर्ग में ओवरराइड करने की आवश्यकता हैओवरराइड कीवर्ड से पहले है।
सार विधि और आभासी विधि के बीच अंतर
आभासी तरीकों में कार्यान्वयन होता है और व्युत्पन्न वर्ग को इसे ओवरराइड करने की अनुमति देता है जबकि सार पद्धति किसी भी कार्यान्वयन की पेशकश नहीं करती है और यह बल देती है प्रोग्रामर व्युत्पन्न वर्ग में ओवरराइड विधियों को लिखने के लिए।
इसलिए, सरल शब्दों में, अमूर्त विधियों में उनके अंदर कोई कोड नहीं होता है, जबकि वर्चुअल विधि का अपना कार्यान्वयन होता है।
के बीच अंतर C# में वर्चुअल और ओवरराइड
वर्चुअल कीवर्ड आमतौर पर विधि, संपत्ति आदि के हस्ताक्षर के बाद होता है और इसे व्युत्पन्न वर्ग में ओवरराइड करने की अनुमति देता है। ओवरराइड कीवर्ड का उपयोग व्युत्पन्न वर्ग में उसी विधि/संपत्ति हस्ताक्षर के साथ किया जाता है जो व्युत्पन्न वर्ग में ओवरराइड प्राप्त करने के लिए बेस क्लास में होता है।
क्या C# में वर्चुअल विधि को ओवरराइड करना अनिवार्य है?
कंपाइलर कभी भी प्रोग्रामर को वर्चुअल विधि को ओवरराइड करने के लिए बाध्य नहीं करेगा। डिराइव्ड क्लास को हमेशा वर्चुअल मेथड को ओवरराइड करने की आवश्यकता नहीं होती है।
उदाहरण
आइए वर्चुअल मेथड्स के बारे में अधिक स्पष्ट रूप से समझने के लिए एक उदाहरण पर एक नजर डालते हैं।
इस उदाहरण में, हम बेस क्लास में दो अलग-अलग तरीकों का उपयोग करेंगे, पहला गैर-वर्चुअल तरीका है और दूसरा वर्चुअल कीवर्ड वाला वर्चुअल तरीका है। व्युत्पन्न वर्ग में इन दोनों विधियों को ओवरराइड किया जाएगा।
आइए हम एदेखें:
प्रोग्राम
using System; public class Program { public static void Main(string[] args) { calculate calc = new calculate (); numbers nmbr = calc; calc.addition(); nmbr.addition(); calc.subtraction(); nmbr.subtraction(); } } public class numbers { public void addition(){ Console.WriteLine("This is addition method"); } public virtual void subtraction(){ Console.WriteLine("This is subtraction method"); } } public class calculate : numbers { public void addition(){ Console.WriteLine("This is addition method in the derived class"); } public override void subtraction(){ Console.WriteLine("This is subtraction method override in derived class"); } }
आउटपुट
उपरोक्त प्रोग्राम का आउटपुट है:
यह व्युत्पन्न वर्ग में जोड़ पद्धति है
यह जोड़ पद्धति है
यह व्युत्पन्न श्रेणी में घटाव पद्धति ओवरराइड है
यह घटाव पद्धति है व्युत्पन्न वर्ग में ओवरराइड
स्पष्टीकरण
उपरोक्त उदाहरण में, हमारे पास दो वर्ग हैं, अर्थात् संख्या और गणना। आधार वर्ग संख्या की दो विधियाँ हैं अर्थात जोड़ और घटाव जहाँ जोड़ एक गैर-आभासी विधि है और घटाव एक आभासी विधि है। इसलिए, जब हम इस प्रोग्राम को निष्पादित करते हैं तो बेस क्लास वर्चुअल विधि "जोड़" व्युत्पन्न वर्ग गणना में ओवरराइड हो जाती है।
एक अन्य वर्ग "प्रोग्राम" में हम व्युत्पन्न वर्ग गणना का एक उदाहरण बनाने के लिए एक प्रवेश बिंदु बनाते हैं और फिर हम बेस क्लास के इंस्टेंस ऑब्जेक्ट के लिए एक ही उदाहरण असाइन करते हैं।
जब हम क्लास इंस्टेंसेस का उपयोग करके वर्चुअल और नॉन-वर्चुअल तरीकों को कॉल करते हैं तो हम देखते हैं कि दोनों इंस्टेंसेस का उपयोग करके वर्चुअल मेथड ओवरराइड हो गया। जबकि गैर-वर्चुअल पद्धति को केवल व्युत्पन्न वर्ग को कॉल करते समय ओवरराइड किया गया था।
निष्कर्ष
C # में उपयोग करने वाला कथन मुख्य रूप से संसाधन प्रबंधन के लिए उपयोग किया जाता है। यूजिंग स्टेटमेंट किसी वस्तु के अस्तित्व के लिए सशर्त सीमा को परिभाषित करता है।बयान ब्लॉक। स्टेटमेंट के अंदर परिभाषित कोड को एक आईडीस्पोजेबल इंटरफेस को भी लागू करना चाहिए ताकि .नेट फ्रेमवर्क को परिभाषित वस्तुओं के लिए निपटान विधि को कॉल करने की अनुमति मिल सके। बेस क्लास में विधि के समान हस्ताक्षर। आभासी पद्धति का उपयोग वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में बहुरूपता प्राप्त करने के लिए किया जा सकता है।
वर्चुअल पद्धति का मुख्य रूप से उपयोग तब किया जाता है जब व्युत्पन्न वर्ग में अतिरिक्त कार्यक्षमता की आवश्यकता होती है। वर्चुअल तरीके निजी स्थिर या सार नहीं हो सकते। इसे बेस क्लास में वर्चुअल कीवर्ड और व्युत्पन्न क्लास में ओवरराइड कीवर्ड का उपयोग करके परिभाषित किया गया है।