C# वंशानुक्रम और बहुरूपता कार्यक्रम उदाहरणों के साथ

⚡ स्मार्ट सारांश

C# में इनहेरिटेंस और पॉलीमॉर्फिज्म दो प्रमुख ऑब्जेक्ट-ओरिएंटेड सिद्धांत हैं। इनहेरिटेंस चाइल्ड क्लास को पैरेंट क्लास के फील्ड्स और मेथड्स का पुन: उपयोग करने की अनुमति देता है, जबकि पॉलीमॉर्फिज्म एक ही मेथड नाम को कई रूपों में इस्तेमाल करने की अनुमति देता है।

  • 🧬 विरासत: एक चाइल्ड क्लास अपने पैरेंट क्लास के फील्ड और मेथड को इनहेरिट करती है और अपने खुद के फील्ड और मेथड भी जोड़ सकती है।
  • 🔒 संरक्षित सदस्य: पैरेंट फ़ील्ड को प्रोटेक्टेड मार्क करने से व्युत्पन्न चाइल्ड क्लास उन्हें सीधे रियूज़ कर सकती है।
  • 🧩 बहुरूपता: एक ही मेथड का नाम कई रूप ले सकता है, इसलिए एक ही कॉल संदर्भ के अनुसार अलग-अलग व्यवहार करती है।
  • 🔀 मेथड ओवरलोडिंग: कई विधियों का नाम एक ही होता है लेकिन उनके पैरामीटर अलग-अलग होते हैं, जिनका निर्धारण संकलन समय पर किया जाता है।
  • 🧱 Code पुन: उपयोग: दोनों सिद्धांत डुप्लिकेट कोड को हटाते हैं और संबंधित क्लासों को सुसंगत रखते हैं।
  • 🤖 एआई सहायता: GitHub Copilot आधार और व्युत्पन्न वर्गों का ढांचा तैयार करता है; ML.NET मॉडल इनपुट के रूप में वर्ग पदानुक्रमों का पुन: उपयोग करता है।

C# में इनहेरिटेंस और पॉलीमॉर्फिज्म

C# में इनहेरिटेंस क्या है?

विरासत C# की एक महत्वपूर्ण अवधारणा है। वंशानुक्रम एक अवधारणा है जिसमें आप पैरेंट क्लास और चाइल्ड क्लास को परिभाषित करते हैं। चाइल्ड क्लास पैरेंट क्लास के तरीकों और गुणों को विरासत में लेती हैं, लेकिन साथ ही, यदि आवश्यक हो तो वे तरीकों के व्यवहार को भी संशोधित कर सकती हैं। यदि आवश्यक हो तो चाइल्ड क्लास अपने स्वयं के तरीकों को भी परिभाषित कर सकती है।

आइए एक प्रोग्राम उदाहरण द्वारा C# इनहेरिटेंस को बेहतर ढंग से समझें:

C# वंशानुक्रम उदाहरण

आइए अब देखें कि हम अपने कोड में वंशानुक्रम की अवधारणा को कैसे शामिल कर सकते हैं।

चरण 1) पहला कदम हमारे ट्यूटोरियल क्लास के लिए कोड बदलना है। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं।

C# वंशानुक्रम उदाहरण

ध्यान दें कि अब हमें TutorialID और TutorialName दोनों फ़ील्ड में 'protected' एक्सेस संशोधक जोड़ना होगा।

याद रहे हमने इस एक्सेस मॉडिफायर का जिक्र किया था। एक्सेस मॉडिफायर ट्यूटोरियलयहां आप इसका उद्देश्य समझ सकते हैं। केवल जब आपके पास यह एक्सेस मॉडिफायर (सुरक्षित) होगा, तभी चाइल्ड क्लास पैरेंट क्लास के फ़ील्ड का उपयोग कर पाएगी।

चरण 2) दूसरा चरण हमारी नई चाइल्ड क्लास को जोड़ना है। इस क्लास का नाम होगा “Guru99Tutorial”। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं। यह कोड Tutorial क्लास की परिभाषा के बाद रखा जाना चाहिए।

C# वंशानुक्रम उदाहरण

Code स्पष्टीकरण: -

  1. पहला कदम है बनाना Guru99Tutorial एक चाइल्ड क्लास है। हमें यह भी बताना होगा कि यह क्लास Tutorial क्लास की चाइल्ड क्लास होगी। यह ':' कीवर्ड द्वारा दर्शाया जाता है।
  2. इसके बाद, हम RenameTutorial नामक एक विधि को परिभाषित कर रहे हैं। इसका उपयोग TutorialName फ़ील्ड का नाम बदलने के लिए किया जाएगा। यह विधि एक स्ट्रिंग वैरिएबल स्वीकार करती है जिसमें ट्यूटोरियल का नया नाम होता है।
  3. फिर हमने TutorialName फ़ील्ड को पैरामीटर pNewName निर्दिष्ट किया। नोट:- यद्यपि हमने “ट्यूटोरियलनेम फ़ील्ड को परिभाषित नहीं किया हैGuru“99Tutorial” क्लास में, हम अभी भी इस फ़ील्ड तक पहुँच सकते हैं। ऐसा इसलिए है क्योंकि “Guru“99Tutorial” ट्यूटोरियल क्लास की चाइल्ड क्लास है। और क्योंकि हमने ट्यूटोरियल क्लास के फ़ील्ड्स को प्रोटेक्टेड बनाया है, इसलिए इस क्लास द्वारा उन्हें एक्सेस किया जा सकता है।

चरण 3) अंतिम चरण में, हमें अपनी मुख्य Program.cs फ़ाइल को संशोधित करना है। अपने कंसोल एप्लिकेशन में, हम इसका एक ऑब्जेक्ट बनाने जा रहे हैं। Guru99Tutorial क्लास। इस ऑब्जेक्ट के साथ, हम RenameTutorial मेथड को कॉल करेंगे। फिर हम GetTutorial मेथड की मदद से TutorialName फ़ील्ड को प्रदर्शित करेंगे।

C# वंशानुक्रम उदाहरण

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(); 
  }
 }
}

Code स्पष्टीकरण: -

  1. पहला चरण इसके लिए एक ऑब्जेक्ट बनाना है। Guru99Tutorial क्लास। यह 'new' कीवर्ड के माध्यम से किया जाता है। ध्यान दें कि इस बार हम Tutorial क्लास का ऑब्जेक्ट नहीं बना रहे हैं।
  2. हम RenameTutorial विधि का उपयोग करते हैं Guru99Tutorial क्लास का उपयोग TutorialName फ़ील्ड को बदलने के लिए किया जाता है। हम स्ट्रिंग “.Net” पास करते हैं। Guru99” को RenameTutorial विधि में जोड़ें।
  3. फिर हम GetTutorial विधि को कॉल करते हैं। ध्यान दें कि यद्यपि यह विधि परिभाषित नहीं है, Guru99Tutorial क्लास में, हम अभी भी इस मेथड को एक्सेस कर सकते हैं। GetTutorial मेथड का आउटपुट फिर Console.WriteLine मेथड के माध्यम से कंसोल पर प्रदर्शित किया जाता है।

यदि उपरोक्त कोड ठीक से दर्ज किया गया है और प्रोग्राम सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट प्रदर्शित होगा।

आउटपुट:

C# वंशानुक्रम उदाहरण

आउटपुट से हम स्पष्ट रूप से देख सकते हैं कि ट्यूटोरियलनेम फ़ील्ड का नाम बदलकर “.Net” कर दिया गया है। Guru99”। यह चाइल्ड क्लास द्वारा कॉल किए गए RenameTutorial मेथड के कारण संभव हुआ।

C# में बहुरूपता क्या है?

बहुरूपता in C# यह एक OOPs अवधारणा है जहाँ एक नाम के कई रूप हो सकते हैं। उदाहरण के लिए, आपके पास संचार के लिए एक स्मार्टफोन है। आप संचार का जो भी माध्यम चुनते हैं, वह कुछ भी हो सकता है। यह कॉल, टेक्स्ट मैसेज, पिक्चर मैसेज, ईमेल आदि हो सकता है। लक्ष्य तो एक ही है, यानी संचार, लेकिन उनका तरीका अलग-अलग है। इसे ही बहुरूपता (पॉलीमॉर्फिज्म) कहते हैं।

नीचे दिए गए प्रोग्राम उदाहरण से आपको C# बहुरूपता की बेहतर समझ मिलेगी:

C# बहुरूपता उदाहरण

आइए अब देखें कि हम अपने कोड में बहुरूपता की अवधारणा को कैसे शामिल कर सकते हैं।

चरण 1) पहला कदम हमारे ट्यूटोरियल क्लास के लिए कोड बदलना है। इस चरण में, हम नीचे दिए गए कोड को Tutorial.cs फ़ाइल में जोड़ते हैं।

C# बहुरूपता उदाहरण

Code स्पष्टीकरण: -

1 और 2) पहला चरण हमारे पिछले उदाहरणों के समान ही है। हम रख रहे हैंping SetTutorial विधि की परिभाषा यथावत।

3) यह विधि पैरामीटर pID और pName के आधार पर TutorialID और TutorialName सेट करती है।

4) यहाँ हम अपने क्लास में बदलाव करते हैं जिसमें हम SetTutorial के समान नाम के साथ एक नया मेथड जोड़ते हैं। बस इस बार हम केवल एक पैरामीटर पास कर रहे हैं जो pName है। इस मेथड में, हम केवल TutorialName के फील्ड को pName पर सेट कर रहे हैं।

चरण 2) अंतिम चरण में, हमें अपनी मुख्य Program.cs फ़ाइल को संशोधित करना है। अपने कंसोल एप्लिकेशन में, हम इसका एक ऑब्जेक्ट बनाने जा रहे हैं। Guru99ट्यूटोरियल क्लास।

C# बहुरूपता उदाहरण

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(); 
  }
 }
}

Code स्पष्टीकरण: -

  1. पहले चरण में, हम 2 पैरामीटर के साथ SetTutorial विधि का उपयोग कर रहे हैं। जहाँ हम इस विधि में TutorialID और TutorialName दोनों को पास कर रहे हैं।
  2. दूसरे चरण में, हम अब SetTutorial विधि को सिर्फ़ एक पैरामीटर के साथ कॉल कर रहे हैं। हम इस विधि में सिर्फ़ TutorialName पास कर रहे हैं।

यदि उपरोक्त कोड सही तरीके से दर्ज किया गया है और प्रोग्राम चलाया गया है तो निम्न आउटपुट प्रदर्शित होगा। यदि आप ट्यूटोरियल नाम के साथ ट्यूटोरियल आईडी भी प्राप्त करना चाहते हैं, तो आपको नीचे दिए गए चरण का पालन करना चाहिए

  1. public int GetTutorialID नामक एक अलग विधि बनाएं
  2. उस विधि में कोड लाइन “return TutorialID” लिखें। इसका उपयोग कॉलिंग प्रोग्राम को TutorialID लौटाने के लिए किया जा सकता है।

आउटपुट:

C# बहुरूपता उदाहरण

आउटपुट से, हम स्पष्ट रूप से देख सकते हैं कि दोनों विधियों को सफलतापूर्वक कॉल किया गया था। इस वजह से, स्ट्रिंग्स “पहला ट्यूटोरियल” और “दूसरा ट्यूटोरियल” कंसोल पर भेजे गए थे।

अक्सर पूछे जाने वाले प्रश्न

C# में क्लास के माध्यम से सिंगल, मल्टीलेवल और हायरार्किकल इनहेरिटेंस का समर्थन किया जाता है। मल्टीपल इनहेरिटेंस केवल इंटरफेस के माध्यम से ही संभव है।

नहीं। AC# क्लास केवल एक बेस क्लास से इनहेरिट करती है। मल्टीपल इनहेरिटेंस में कई इंटरफेस का उपयोग होता है।

ओवरलोडिंग में कंपाइल टाइम पर अलग-अलग पैरामीटर के साथ एक ही नाम का उपयोग किया जाता है। ओवरराइडिंग रन टाइम पर एक वर्चुअल बेस मेथड को पुनर्परिभाषित करती है।

वर्चुअल कीवर्ड बेस मेथड को ओवरराइड करने योग्य बनाता है; ओवरराइड कीवर्ड इसे व्युत्पन्न क्लास में पुनर्परिभाषित करता है।

बेस कीवर्ड व्युत्पन्न क्लास को पैरेंट कंस्ट्रक्टर को कॉल करने या छिपे हुए या ओवरराइड किए गए बेस सदस्यों तक पहुंचने की अनुमति देता है।

क्लास को सील्ड के रूप में चिह्नित करें। एक सील्ड क्लास बेस क्लास नहीं हो सकती, जिससे आगे की इनहेरिटेंस रुक जाती है और परफॉर्मेंस बेहतर होती है।

जी हां। GitHub Copilot बेस और चाइल्ड क्लास का ढांचा तैयार करता है और कमेंट या क्लास नाम से वर्चुअल और ओवरराइड मेथड जोड़ता है।

ML.NET डेटा और भविष्यवाणी वर्गों को परिभाषित करता है जो साझा सदस्यों को विरासत में प्राप्त करते हैं, और इसकी पाइपलाइन एक सामान्य ट्रांसफार्मर आधार प्रकार का पुन: उपयोग करती है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: