सी # में एकाधिक विरासत क्यों संभव नहीं है?
सी # में एकाधिक विरासत क्यों संभव नहीं है?

वीडियो: सी # में एकाधिक विरासत क्यों संभव नहीं है?

वीडियो: सी # में एकाधिक विरासत क्यों संभव नहीं है?
वीडियो: भाग 34 - सी# ट्यूटोरियल - एकाधिक वर्ग वंशानुक्रम की समस्याएं।एवीआई 2024, नवंबर
Anonim

सी # करता है नहीं सहयोग एकाधिक विरासत , क्योंकि उन्होंने तर्क दिया कि जोड़ना एकाधिक विरासत बहुत कम लाभ प्रदान करते हुए C# में बहुत अधिक जटिलता जोड़ी गई। सी # में, कक्षाएं केवल हैं अनुमति प्रति इनहेरिट सिंगल पेरेंट क्लास से, जिसे सिंगल कहा जाता है विरासत.

बस इतना ही, एकाधिक विरासत की अनुमति क्यों नहीं है?

जावा समर्थन करता है एकाधिक विरासत केवल इंटरफेस के माध्यम से। एक वर्ग किसी भी संख्या में इंटरफेस को लागू कर सकता है लेकिन केवल एक वर्ग का विस्तार कर सकता है। एकाधिक वंशानुक्रम समर्थित नहीं है क्योंकि यह घातक हीरे की समस्या की ओर जाता है। एक इंटरफ़ेस उन चीज़ों का अनुबंध है जिन्हें आपकी कक्षा को लागू करना है।

कोई यह भी पूछ सकता है कि क्या हम C# में कई इंटरफेस इनहेरिट कर सकते हैं? इंटरफेस एक वर्ग पर क्या समझौते या "अनुबंध" की तरह हैं क्या कर सकते हैं . कक्षाओं कर सकते हैं पास होना एकाधिक इंटरफेस , लेकिन कक्षाएं नहीं कर सकते एकाधिक विरासत में मिला कक्षाएं। कक्षाओं इनहेरिट अधिक से अधिक से एक वर्ग के रूप में जाना जाता है विभिन्न - विरासत . सी # करता है अनुमति न दें विभिन्न - विरासत.

यहां, एकाधिक विरासत सी # में डायमंड समस्या क्या है?

NS " हीरे की समस्या "एक अस्पष्टता है जो तब उत्पन्न होती है जब दो वर्ग बी और सी इनहेरिट ए और क्लास डी से inherits बी और सी दोनों से। यदि ए में कोई विधि है कि बी और सी ने ओवरराइड किया है, और डी इसे ओवरराइड नहीं करता है, तो विधि का कौन सा वर्ग डी करता है इनहेरिट : बी की, या सी की?

उदाहरण के साथ सी # में एकाधिक विरासत क्या है?

सी# अनुमति नहीं देता एकाधिक विरासत कक्षाओं के साथ लेकिन इसे इंटरफ़ेस का उपयोग करके कार्यान्वित किया जा सकता है। इसके पीछे का कारण है: एकाधिक विरासत थोड़े लाभ के साथ बहुत अधिक जटिलता जोड़ें। बेस क्लास सदस्य के परस्पर विरोधी होने की बहुत बड़ी संभावना है। विरासत इंटरफ़ेस के साथ समान कार्य प्रदान करता है एकाधिक विरासत.

सिफारिश की: