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