यो गहिरो ट्युटोरियलले C# को कथन र भर्चुअल विधि प्रयोग गर्ने बारे सबै व्याख्या गर्दछ। तपाईले सार र भर्चुअल विधिहरू बीचको भिन्नता पनि सिक्नुहुनेछ:
प्रयोग ब्लकले मुख्यतया स्रोतहरू व्यवस्थापन गर्न मद्दत गर्दछ, यसले प्रणालीलाई वस्तुको दायरा र यसको स्रोत आवश्यकता निर्दिष्ट गरेर यसको स्रोतहरू व्यवस्थापन गर्न अनुमति दिन्छ।
. नेट फ्रेमवर्कले फोहोर सङ्कलन गर्ने वस्तुहरूको लागि स्रोत व्यवस्थापनको लागि विभिन्न तरिकाहरू प्रदान गर्दछ। यसको मतलब तपाईंले स्पष्ट रूपमा मेमोरी वस्तुहरू आवंटित र हटाउन आवश्यक छैन। कुनै पनि अप्रबन्धित वस्तुको लागि सफाई कार्य डिस्ट्रक्टर प्रयोग गरेर ह्यान्डल गरिनेछ।
यो प्राप्त गर्न प्रोग्रामरहरूलाई मद्दत गर्नको लागि, C# प्रयोग गरेर कथनले वस्तुको विनाशको लागि शर्त प्रदान गर्दछ।
वस्तुको स्वत: विनाश प्राप्त गर्न, C# ले डिस्पोज विधि प्रदान गर्दछ जुन वस्तुलाई आवश्यक पर्दैन भने कल गर्न सकिन्छ। C# मा प्रयोग गरिएको कथनले वस्तुको अस्तित्वको लागि सशर्त सीमा परिभाषित गर्दछ। एकपटक कार्यान्वयन अनुक्रमले प्रयोग सीमा छोडेपछि, नेट फ्रेमवर्कले त्यो वस्तुलाई नष्ट गर्ने समय थाहा पाउनेछ।
C# कथन प्रयोग गर्दै
प्रयोग गर्नका लागि IDisposable इन्टरफेस लागू गर्नुहोस्
द C# कथन प्रयोग गरेर प्रोग्रामरहरूलाई एक कथनमा धेरै स्रोतहरू लागू गर्न अनुमति दिन्छ। प्रयोग गर्ने कोड ब्लक भित्र परिभाषित सबै वस्तुहरूले IDisposable इन्टरफेस लागू गर्नुपर्छ, र यसले ढाँचालाई डिस्पोज कल गर्न अनुमति दिन्छ।एकपटक बाहिर निस्किएपछि स्टेटमेन्ट भित्र निर्दिष्ट वस्तुहरूका लागि विधिहरू।
उदाहरण
कथनहरू प्रयोग गरी IDisposable जस्तै 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# Virtual विधि
भर्चुअल विधि के हो?
भर्चुअल विधि एक वर्ग विधि हो जसले प्रोग्रामरलाई समान हस्ताक्षर भएको व्युत्पन्न वर्गमा विधिलाई ओभरराइड गर्न कार्यक्षमता प्रदान गर्दछ। भर्चुअल विधिहरू मुख्यतया OOPs वातावरणमा बहुरूपता प्रदर्शन गर्न प्रयोग गरिन्छ।
एक भर्चुअल विधिले व्युत्पन्न र आधार वर्ग दुवैमा कार्यान्वयन गर्न सक्छ। यो मुख्यतया प्रयोग गरिन्छ जब प्रयोगकर्तालाई व्युत्पन्न वर्गमा थप कार्यक्षमता आवश्यक पर्दछ।
एक भर्चुअल विधि पहिले आधार वर्गमा सिर्जना गरिन्छ र त्यसपछि योव्युत्पन्न वर्गमा ओभरराइड गरियो। "भर्चुअल" कुञ्जी शब्द प्रयोग गरेर आधार वर्गमा भर्चुअल विधि सिर्जना गर्न सकिन्छ र उही विधिलाई "ओभरराइड" कुञ्जी शब्द प्रयोग गरेर व्युत्पन्न वर्गमा ओभरराइड गर्न सकिन्छ।
भर्चुअल विधिहरू: सम्झनका लागि केही अंकहरू
- व्युत्पन्न वर्गमा भर्चुअल विधिमा भर्चुअल कुञ्जी शब्द छ र व्युत्पन्न वर्गको विधिमा ओभरराइड किवर्ड हुनुपर्छ।
- यदि कुनै विधिलाई आधार वर्गमा भर्चुअल विधिको रूपमा घोषणा गरिएको छ भने , तब व्युत्पन्न वर्गले त्यो विधिलाई ओभरराइड गर्न सधैं आवश्यक पर्दैन अर्थात् व्युत्पन्न वर्गमा भर्चुअल विधिलाई ओभरराइड गर्न वैकल्पिक।
- यदि कुनै विधिको आधार र व्युत्पन्न वर्ग दुवैमा एउटै परिभाषा छ भने यो होइन। विधि ओभरराइड गर्न आवश्यक छ। दुवैको फरक परिभाषा भएमा मात्र ओभरराइड आवश्यक हुन्छ।
- ओभरराइडिङ विधिले हामीलाई एउटै विधिको लागि एकभन्दा बढी फारमहरू प्रयोग गर्न अनुमति दिन्छ, त्यसैले यसले बहुरूपता पनि देखाउँछ।
- सबै विधिहरू गैर हुन्। -पूर्वनिर्धारित रूपमा भर्चुअल।
- एक भर्चुअल परिमार्जक निजी, स्थिर, वा एब्स्ट्र्याक्ट परिमार्जकहरूसँग प्रयोग गर्न सकिँदैन।
C# मा भर्चुअल किवर्डको प्रयोग के हो?
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# मा प्रयोगको कथन मुख्य रूपमा संसाधन व्यवस्थापनको लागि प्रयोग गरिन्छ। प्रयोगको कथनले वस्तुको अस्तित्वको लागि सशर्त सीमा परिभाषित गर्दछ।
एकपटक कार्यान्वयन स्टेटमेन्ट ब्लकबाट बाहिर जाँदा, यसले ढाँचालाई भित्र सिर्जना गरिएको कुनै पनि वस्तुलाई नष्ट गर्न बताउँछ।कथन ब्लक। कथन भित्र परिभाषित कोडले .Net फ्रेमवर्कलाई परिभाषित वस्तुहरूको लागि डिस्पोज विधि कल गर्न अनुमति दिनको लागि IDisposable इन्टरफेस पनि लागू गर्नुपर्छ।
एक भर्चुअल विधिले प्रयोगकर्तालाई व्युत्पन्न वर्गमा विधिलाई ओभरराइड गर्न अनुमति दिन्छ। आधार वर्ग मा विधि जस्तै हस्ताक्षर। वस्तु-उन्मुख प्रोग्रामिङ भाषाहरूमा बहुरूपता प्राप्त गर्न भर्चुअल विधि प्रयोग गर्न सकिन्छ।
व्युत्पन्न वर्गमा अतिरिक्त कार्यक्षमता आवश्यक हुँदा भर्चुअल विधि मुख्य रूपमा प्रयोग गरिन्छ। भर्चुअल विधिहरू निजी स्थिर वा अमूर्त हुन सक्दैन। यसलाई आधार वर्गमा भर्चुअल किवर्ड र व्युत्पन्न वर्गमा ओभरराइड किवर्ड प्रयोग गरेर परिभाषित गरिएको छ।