C# वंशानुक्रम और बहुरूपता कार्यक्रम उदाहरणों के साथ
C# में इनहेरिटेंस क्या है?
विरासत C# की एक महत्वपूर्ण अवधारणा है। वंशानुक्रम एक अवधारणा है जिसमें आप पैरेंट क्लास और चाइल्ड क्लास को परिभाषित करते हैं। चाइल्ड क्लास पैरेंट क्लास के तरीकों और गुणों को विरासत में लेती हैं, लेकिन साथ ही, यदि आवश्यक हो तो वे तरीकों के व्यवहार को भी संशोधित कर सकती हैं। यदि आवश्यक हो तो चाइल्ड क्लास अपने स्वयं के तरीकों को भी परिभाषित कर सकती है।
आइए एक प्रोग्राम उदाहरण द्वारा C# इनहेरिटेंस को बेहतर ढंग से समझें:
C# वंशानुक्रम उदाहरण
आइए अब देखें कि हम अपने कोड में वंशानुक्रम की अवधारणा को कैसे शामिल कर सकते हैं।
चरण 1) पहला कदम हमारे ट्यूटोरियल क्लास के लिए कोड बदलना है। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं।
ध्यान दें कि अब हमें TutorialID और TutorialName दोनों फ़ील्ड में 'protected' एक्सेस संशोधक जोड़ना होगा।
याद रखें कि हमने एक्सेस मॉडिफायर ट्यूटोरियल में इस एक्सेस मॉडिफायर का उल्लेख किया था। खैर यहाँ आप इसके होने का उद्देश्य देख सकते हैं। केवल जब आपके पास यह एक्सेस मॉडिफायर (संरक्षित) होता है, तो चाइल्ड क्लास पैरेंट क्लास के फ़ील्ड का उपयोग करने में सक्षम होता है।
चरण 2) दूसरा चरण हमारी नई चाइल्ड क्लास को जोड़ना है। इस क्लास का नाम "Guru99Tutorial" होगा। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं। कोड को ट्यूटोरियल क्लास परिभाषा के बाद रखा जाना चाहिए।
कोड स्पष्टीकरण:-
- पहला कदम गुरु99ट्यूटोरियल चाइल्ड क्लास बनाना है। हमें यह भी बताना होगा कि यह क्लास ट्यूटोरियल क्लास की चाइल्ड क्लास होगी। यह ':' कीवर्ड द्वारा किया जाता है।
- इसके बाद, हम RenameTutorial नामक एक विधि को परिभाषित कर रहे हैं। इसका उपयोग TutorialName फ़ील्ड का नाम बदलने के लिए किया जाएगा। यह विधि एक स्ट्रिंग वैरिएबल स्वीकार करती है जिसमें ट्यूटोरियल का नया नाम होता है।
- फिर हमने TutorialName फ़ील्ड को पैरामीटर pNewName निर्दिष्ट किया।
नोट: – भले ही हमने “Guru99Tutorial” क्लास में TutorialName फ़ील्ड को परिभाषित नहीं किया है, फिर भी हम इस फ़ील्ड को एक्सेस करने में सक्षम हैं। ऐसा इसलिए है क्योंकि “Guru99Tutorial” Tutorial क्लास का चाइल्ड क्लास है। और क्योंकि हमने Tutorial क्लास के फ़ील्ड को प्रोटेक्टेड बनाया है, इसलिए उन्हें इस क्लास द्वारा एक्सेस किया जा सकता है।
चरण 3) अंतिम चरण हमारी मुख्य Program.cs फ़ाइल को संशोधित करना है। हमारे कंसोल एप्लिकेशन में, हम Guru99Tutorial क्लास का ऑब्जेक्ट बनाने जा रहे हैं। इस ऑब्जेक्ट के साथ, हम RenameTutorial विधि को कॉल करने जा रहे हैं। फिर हम GetTutorial विधि की मदद से TutorialName फ़ील्ड प्रदर्शित करने जा रहे हैं।
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { public class Tutorial { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public String GetTutorial() { return TutorialName; } } public class Guru99Tutorial:Tutorial { public void RenameTutorial(String pNewName) { TutorialName=pNewName; } static void Main(string[] args) { Guru99Tutorial pTutor=new Guru99Tutorial(); pTutor.RenameTutorial(".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
कोड स्पष्टीकरण:-
- पहला कदम गुरु99ट्यूटोरियल क्लास के लिए एक ऑब्जेक्ट बनाना है। यह 'new' कीवर्ड के ज़रिए किया जाता है। ध्यान दें कि इस बार हम ट्यूटोरियल क्लास का ऑब्जेक्ट नहीं बना रहे हैं।
- हम TutorialName फ़ील्ड को बदलने के लिए Guru99Tutorial क्लास की RenameTutorial विधि का उपयोग करते हैं। हम RenameTutorial विधि में “.Net by Guru99” स्ट्रिंग पास करते हैं।
- फिर हम GetTutorial विधि को कॉल करते हैं। ध्यान दें कि भले ही यह विधि Guru99Tutorial क्लास में परिभाषित नहीं है, फिर भी हम इस विधि तक पहुँचने में सक्षम हैं। GetTutorial विधि का आउटपुट कंसोल पर Console.WriteLine विधि के माध्यम से प्रदर्शित किया जाता है।
यदि उपरोक्त कोड ठीक से दर्ज किया गया है और प्रोग्राम सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट प्रदर्शित होगा।
आउटपुट:
आउटपुट से, हम स्पष्ट रूप से देख सकते हैं कि TutorialName फ़ील्ड का नाम बदलकर “.Net by Guru99” कर दिया गया था। यह चाइल्ड क्लास द्वारा कॉल किए गए RenameTutorial मेथड के कारण संभव हुआ।
C# में बहुरूपता क्या है?
बहुरूपता C# में OOPs अवधारणा है जहाँ एक नाम के कई रूप हो सकते हैं। उदाहरण के लिए, आपके पास संचार के लिए एक स्मार्टफोन है। आप जो संचार मोड चुनते हैं वह कुछ भी हो सकता है। यह कॉल, टेक्स्ट मैसेज, पिक्चर मैसेज, मेल आदि हो सकता है। इसलिए, लक्ष्य एक ही है, यानी संचार, लेकिन उनका तरीका अलग है। इसे पॉलीमॉर्फिज्म कहा जाता है।
नीचे दिए गए प्रोग्राम उदाहरण से आपको C# बहुरूपता की बेहतर समझ मिलेगी:
C# बहुरूपता उदाहरण
आइए अब देखें कि हम अपने कोड में बहुरूपता की अवधारणा को कैसे शामिल कर सकते हैं।
चरण 1) पहला कदम हमारे ट्यूटोरियल क्लास के लिए कोड बदलना है। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं।
कोड स्पष्टीकरण:-
1 और 2) पहला चरण हमारे पिछले उदाहरणों जैसा ही है। हम SetTutorial विधि की परिभाषा को वैसे ही रख रहे हैं।
3) यह विधि पैरामीटर pID और pName के आधार पर TutorialID और TutorialName सेट करती है।
4) यहाँ हम अपने क्लास में बदलाव करते हैं जिसमें हम SetTutorial के समान नाम के साथ एक नया मेथड जोड़ते हैं। बस इस बार हम केवल एक पैरामीटर पास कर रहे हैं जो pName है। इस मेथड में, हम केवल TutorialName के फील्ड को pName पर सेट कर रहे हैं।
चरण 2) अंतिम चरण हमारी मुख्य Program.cs फ़ाइल को संशोधित करना है। हमारे कंसोल एप्लिकेशन में, हम Guru99Tutorial क्लास का ऑब्जेक्ट बनाने जा रहे हैं।
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { public int TutorialID; public string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public void SetTutorial(string pName) { TutorialName=pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Tutorial pTutor=new Tutorial(); pTutor.SetTutorial(1,"First Tutorial"); Console.WriteLine(pTutor.GetTutorial()); pTutor.SetTutorial("Second Tutorial"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
कोड स्पष्टीकरण:-
- पहले चरण में, हम 2 पैरामीटर के साथ SetTutorial विधि का उपयोग कर रहे हैं। जहाँ हम इस विधि में TutorialID और TutorialName दोनों को पास कर रहे हैं।
- दूसरे चरण में, हम अब SetTutorial विधि को सिर्फ़ एक पैरामीटर के साथ कॉल कर रहे हैं। हम इस विधि में सिर्फ़ TutorialName पास कर रहे हैं।
यदि उपरोक्त कोड सही तरीके से दर्ज किया गया है और प्रोग्राम चलाया गया है तो निम्न आउटपुट प्रदर्शित होगा। यदि आप ट्यूटोरियल नाम के साथ ट्यूटोरियल आईडी भी प्राप्त करना चाहते हैं, तो आपको नीचे दिए गए चरण का पालन करना चाहिए
- public int GetTutorialID नामक एक अलग विधि बनाएं
- उस विधि में कोड लाइन “return TutorialID” लिखें। इसका उपयोग कॉलिंग प्रोग्राम को TutorialID लौटाने के लिए किया जा सकता है।
आउटपुट:
आउटपुट से, हम स्पष्ट रूप से देख सकते हैं कि दोनों विधियों को सफलतापूर्वक कॉल किया गया था। इस वजह से, स्ट्रिंग्स “पहला ट्यूटोरियल” और “दूसरा ट्यूटोरियल” कंसोल पर भेजे गए थे।
सारांश
- इनहेरिटेंस वह है जहाँ चाइल्ड क्लास पैरेंट क्लास के फ़ील्ड और मेथड को इनहेरिट करता है। चाइल्ड क्लास तब अपने खुद के मेथड भी परिभाषित कर सकता है।
- बहुरूपता C# यह एक OOPs अवधारणा है जहां एक नाम के कई रूप हो सकते हैं।