2012-09-25 18 views
6

जैसा कि हम जानते हैं .Net एकाधिक विरासत का समर्थन नहीं करता है। इस प्रकार हम केवल केवल एक वर्ग का उत्तराधिकारी बना सकते हैं। लेकिन डिफ़ॉल्ट रूप से प्रत्येक वर्ग 'ऑब्जेक्ट' वर्ग विरासत में मिलता है। तो जब मैं किसी अन्य वर्ग का वारिस करता हूं तो त्रुटि क्यों नहीं होती है।ऑब्जेक्ट (रूट) वर्ग एकाधिक विरासत को क्यों नहीं रोकता है

उदाहरण के लिए ए-बेस क्लास, बी-व्युत्पन्न कक्षा। जब मैं ए: बी का उपयोग करता हूं, तो निश्चित रूप से ऑब्जेक्ट क्लास को विरासत में मिला है (मुझे लगता है) ए: बी, ऑब्जेक्ट। यह कैसे संभव हो सकता है यदि नेट एकाधिक विरासत का समर्थन नहीं करता है।

+2

ऑब्जेक्ट को हर दूसरे वर्ग के ग्रैंड पेरेंट के रूप में सोचें। कक्षा ए बच्चा है, कक्षा बी भव्य बच्चा है। बी में केवल 1 मूल वर्ग है जो ए और ऑब्जेक्ट बी के ग्रैंड पेरेंट है। – shahkalpesh

उत्तर

13

नहीं, यह ऐसी बात नहीं है - केवल एक विरासत श्रृंखला है, जो होगा:

__________ 
| Object | 
---------- 
    ^
    | 
__________ 
| A | 
---------- 
    ^
    | 
__________ 
| B | 
---------- 

किसी भी एक वर्ग केवल एक प्रत्यक्ष आधार वर्ग है, लेकिन कक्षाओं की विरासत श्रृंखला लंबी हो सकती है।

क्यों इस ,BA से सीधे विरासत के रूप में ही नहीं है A ओवरराइड ToString, वहाँ Object.ToString() के मूल कार्यान्वयन बुला B का कोई रास्ता नहीं है, तो का एक उदाहरण के रूप में - यह कर सकते हैं केवल कॉल A की संस्करण (और निश्चित रूप से ToString ओवरराइड करें)।

3

यह आसान है, घोषित वर्ग केवलobject से विरासत प्राप्त करता है यदि यह किसी अन्य वर्ग से प्राप्त नहीं होता है। क्या संकलक करता है कि यह प्रभावी रूप

public class MyBaseLessClass 
{ 
} 

public class MyBaseLessClass : object 
{ 
} 

में परिवर्तन है, इसलिए प्रत्येक और हर वर्ग है कि ठीक एक वर्ग से इनहेरिट करती है। (barber paradox की तरह थोड़ा :))

संबंधित मुद्दे