C # सार, आभासी और रद्द करने के बीच का अंतर है

सी #

आज मैं आपको सार, आभासी और C # ओवरराइड के बीच का अंतर दिखाना चाहता हूं।

निष्कर्ष

किसी कार्य या वर्ग में एक सार जोड़ने का मतलब है कि यह अवास्तविक है और यह उम्मीद करता है कि इसे प्राप्त वर्ग द्वारा निष्पादित किया जाएगा। आइए जानवरों का एक सार वर्ग बनाएं:

सार्वजनिक सार वर्ग {सार्वजनिक रिक्त शेल () {कंसोल। वाइटलाइन ("एनिमल बार्क"); }}

आइए पशु वर्ग उदाहरण बनाने का प्रयास करें।

पशु पशु = नया जानवर ();

आइए ऐसा करते हैं और संकलक आपको वह त्रुटि लौटाएगा जो आप एक अमूर्त वर्ग का उदाहरण नहीं बना सकते

निष्कर्ष वर्ग नहीं बनाया जा सकता है

आइए एक वर्ग बनाएं जो एक जानवर द्वारा विरासत में मिला है।

पब्लिक क्लास डॉग: एनिमल {पब्लिक बार्क () {कंसोल। वाइटलाइन ("डॉग बार्क"); }}

अब हम डॉग ऑब्जेक्ट का उपयोग करके एनिमल इंस्टेंस बनाने में सक्षम हैं। बेशक, हम एक डॉग टाइप डॉग उदाहरण भी बनाते हैं।

पशु पशु = नया कुत्ता (); कुत्ता कुत्ता = नया कुत्ता ();

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

क्या होता है फंक्शन शेल? एक परिवर्तित जानवर के लिए, चूंकि इसका प्रकार एक जानवर है, पशु वर्ग में परिभाषित शेल फ़ंक्शन को कहा जाता है। एक बदलते कुत्ते के लिए, अपने कुत्ते के प्रकार के कारण, डॉग क्लास में परिभाषित छाल फ़ंक्शन को कहा जाता है।

यदि आप कार्यों के बारे में एक सार लिखते हैं, तो आप इस वर्ग में एक कार्य नहीं कर सकते हैं और आपको इसे व्युत्पन्न वर्ग में निष्पादित करना होगा। आइए जानवरों और कुत्तों के वर्ग को बदलें:

सार्वजनिक सार वर्ग {सार्वजनिक सार छाल () {Console.WriteLine ("एनिमल बार्क"); }}
पब्लिक क्लास डॉग: एनिमल {पब्लिक बार्क () {कंसोल। वाइटलाइन ("डॉग बार्क"); }}

कंपाइल त्रुटियों को चलाते समय लौटा दिया गया था।

एक सार कार्य नहीं किया जा सकता है

इसलिए, कंपाइलर निर्देशों का पालन करें। पशु वर्ग में प्याज के छिलके को निकालें और काटें। क्यों? संकलन त्रुटि हुई! ??

रद्द करना

हां। यहां दूसरा कीवर्ड आता है - कैंसिल। डॉग क्लास में एनिमल क्लास में छाल प्रबंधन फ़ंक्शन को लागू करने के लिए, आपको कंपाइलर को यह बताने के लिए छाल फ़ंक्शन को रद्द करना होगा कि यह एनिमल क्लास में छाल का प्रदर्शन करता है (जैसा कि उसने पहले किया था)। । संशोधन के बाद, संकलन सफल रहा और अब आप दोनों पंक्तियों - "डॉग कोट" को देख सकते हैं।

वास्तविक

आभासी के बारे में बात करते हैं। वर्चुअल फ़ंक्शन जोड़कर, आप फ़ंक्शन के लिए एक सामान्य तर्क प्रदान करते हैं, लेकिन मुख्य फ़ंक्शन को ओवरराइड करने के लिए लचीलापन देते हैं। आप कह सकते हैं कि यह बहुत समान है जब फ़ंक्शन में वर्चुअल फीचर नहीं जोड़ा जाता है। बिलकुल नहीं। अब मैं आपको एक आभासी और एक गैर-आभासी फ़ंक्शन के बीच का अंतर दिखाने जा रहा हूं। आइए जानवरों और कुत्तों के वर्ग और बुनियादी कार्यों को बदलें:

सार्वजनिक वर्ग कार्यक्रम {स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {पशु पशु = नया कुत्ता (); कुत्ता कुत्ता = नया कुत्ता (); animal.bark (); it.bark ();
animal.eat (); it.eat ();
Console.ReadLine (); }}
सार्वजनिक वर्ग का जानवर {सार्वजनिक आभासी खाली खोल () {कंसोल। वाइटलाइन ("एनिमल बार्क"); }
सार्वजनिक भोजन () {Console.WriteLine ("पशु भोजन"); }}
सार्वजनिक वर्ग का कुत्ता: पशु {सार्वजनिक शून्य की छाल () {कंसोल। क्राइटलाइन ("डॉग बार्क"); }
सार्वजनिक रात्रिभोज () {Console.WriteLine ("एक कुत्ते को खाना"); }}

और परिणाम है:

यदि आप बेस क्लास में एक वर्चुअल फंक्शन रद्द करते हैं, तो बेस और डीविटेड क्लास में फंक्शन समान हैं। आभासी और गैर-रद्द करने के साथ, आपको दो अलग-अलग कार्य मिलते हैं - Animal.bark और Dog.bark।

चलिए फिर से प्रयोग करते हैं। मुख्य फ़ंक्शन में निम्न 2 पंक्तियाँ जोड़ें:

पशु Animal2 = नया जानवर (); animal2.bark ();

अब जब आप इसे चलाते हैं, तो आपको पशु वर्ग में परिभाषित तर्क मिलता है। इस प्रकार, हम इन तीन घोषणाओं और परिणामों को संक्षेप में प्रस्तुत करते हैं:

पशु पशु = नया कुत्ता (); animal.bark (); // आउटपुट: कुत्ते की छाल कुत्ते का कुत्ता = नया कुत्ता (); dog.bark (); // बाहर निकलें: कुत्ते की छाल पशु animal2 = नया जानवर (); animal2.bark (); // आउटपुट: पशु की छाल

सारांश:

जब आप किसी विषय को अमूर्त करने के लिए एक वर्ग का उपयोग करते हैं, तो आप उस वर्ग का एक उदाहरण नहीं बना सकते। आप बच्चों के एक वर्ग को विरासत में दे सकते हैं या एक मूल वर्ग प्रकार के बच्चों का एक वर्ग बना सकते हैं। किसी फ़ंक्शन का उपयोग करते समय, आप फ़ंक्शन का उपयोग मुख्य कक्षा में नहीं कर सकते हैं और इसे चाइल्ड क्लास द्वारा ओवरराइड किया जाना चाहिए।

वर्चुअल के लिए आप बेस क्लास में एक फंक्शन कर सकते हैं। एक बार बाल वर्ग ने इसे रद्द कर दिया, तो इस फ़ंक्शन का केवल 1 संस्करण होगा।

निरस्तीकरण को केवल रद्द करने, आभासी या सार पर लागू किया जा सकता है।

आज भी यही सच है। मुझे उम्मीद है कि आप लोग इस लेख को पसंद करेंगे और आपका दिन अच्छा रहेगा

मूल रूप से timmydinheing.com पर 18 अप्रैल, 2018 को पोस्ट किया गया।