2012-05-24 5 views
31

जैसा कि ऊपर कहा, यह ग # में वस्तु से प्राप्त करना बेमानी है? क्या नीचे दिए गए कोड के दोनों सेट परिणामस्वरूप समतुल्य वस्तुओं को परिभाषित किया जा रहा है?सी # में ऑब्जेक्ट से प्राप्त करने के लिए रिडंडेंट?

class TestClassUno : Object 
{ 
    // Stuff 
} 

बनाम

class TestClassDos 
{ 
    // Stuff 
} 

मैं MSDN पर चारों ओर snooped लेकिन कुछ भी पूरी तरह से निर्णायक खोजने के लिए सक्षम नहीं था।

+13

किसी भी वर्ग परिभाषा पर यह अन्य लेख कि स्पष्ट रूप से 'परोक्ष object' से प्राप्त कर लेंगे एक आधार वर्ग निर्दिष्ट नहीं है देखते हैं। –

उत्तर

33

में वस्तु से विरासत के लिए छोड़ दिया अनिर्दिष्ट हर class परिभाषा परोक्ष System.Object से इसलिए दो परिभाषा बराबर हैं प्राप्त कर लेंगे तो बेमानी है।

केवल समय इन दो अलग अलग हो सकता है अगर किसी को वास्तव में एक ही नाम स्थान में एक और Object प्रकार परिभाषित किया गया है। इस मामले में Object के स्थानीय परिभाषा प्राथमिकता दी जाती है और बदल जाएगा विरासत वस्तु

namespace Example { 
    class Object { } 
    class C : Object { } 
} 

बहुत ज्यादा एक कोने मामले लेकिन यह कहना नहीं होता है, तो मैं इसे पहले

नोट नहीं देखा था कि यदि आपने Object के बजाय object का उपयोग किया तो भी यह सच नहीं है। सी # कीवर्ड objectSystem.Object के लिए एक प्रकार उर्फ ​​है और इसलिए यह Example.Object से मेल नहीं होता।

namespace Example2 { 
    class Object { } 
    class C : Object { } // Uses Example.Object 
    class D : object { } // Uses System.Object 
} 
बेशक

यदि आप वास्तव में एक बुराई डेवलपर आप अभी भी साथ object

namespace System { 
    class Object { 
    private Object() { } 
    } 
} 

namespace Example3 { 
    // This will properly fail to compile since it can't bind to the private 
    // Object constructor. This demonstrates that we are using our definition 
    // of Object instead of mscorlib's 
    class C : object { } // Uses our System.Object 
} 
+7

स्थानीय 'example.Object' अभी भी' System.Object' से प्राप्त नहीं होगा? – Aren

+1

@ स्थानीय 'ऑब्जेक्ट' एरेन वास्तव में होगा लेकिन इस मामले में 'सी' 'उदाहरण' ऑब्जेक्ट ' – JaredPar

+0

से त्वरित प्रतिक्रिया के लिए धन्यवाद होगा। यह निश्चित रूप से एक मामला नहीं है जिसके बारे में मैंने सोचा होगा - अच्छी कॉल। – Keplah

20

हाँ, सब कुछ अंत में एक वस्तु से विरासत अगर class रूप में परिभाषित किया। अपने कोड से स्पष्ट विरासत छोड़ दें।

+1

'संरचना' भी, वास्तव में। –

+0

@Cicada, आप सही हैं। – Aren

+1

@ सीकाडा: 'स्ट्रक्चर' सिस्टम से सीधे * सीधे * प्राप्त होता है। वैल्यू टाइप। यह System.Object से भी प्राप्त होता है (अंततः सब कुछ करता है), लेकिन संरचना प्रकार ओपी पर भी लागू नहीं होते हैं क्योंकि वे केवल इंटरफेस को लागू कर सकते हैं; एक संरचना के रूप में घोषित एक निर्माण कभी भी वैल्यू टाइप के अलावा कुछ भी नहीं प्राप्त कर सकता है। – KeithS

6

वस्तु नेट में सभी वर्गों की जननी है। इसके ऊपर कुछ भी नहीं है।

सभी वर्गों से प्राप्त करती हैं। तो यह कोड

class TestClassDos 
{ 
    // Stuff 
} 

स्वचालित रूप से इसका अर्थ है कि यह ऑब्जेक्ट से विरासत में है।

सबूत: यदि आप इसे प्राप्त कर रहे हैं तो आप ऑब्जेक्ट करने के लिए किसी भी इकाई को टाइपकास्ट कर सकते हैं। वस्तु वर्ग के

सारांश का कहना है

// Supports all classes in the .NET Framework class hierarchy and provides low-level 
// services to derived classes. This is the ultimate base class of all classes 
// in the .NET Framework; it is the root of the type hierarchy. 
+0

आपको .NET में इंटरफ़ेस में '.ToString()' भी मिलेगा, फिर भी इंटरफेस 'System.Object' से प्राप्त नहीं होते हैं। (मैं आपके निष्कर्ष से सहमत हूं, सिर्फ आपके द्वारा दिए गए सबूत के साथ नहीं।) – hvd

+0

@hvd: लेकिन आखिरकार इंटरफेस कक्षाओं द्वारा लागू किया जाएगा। –

+1

हां, या structs द्वारा, जो 'ऑब्जेक्ट' से भी प्राप्त होता है। लेकिन मेरा मुद्दा यह है कि तथ्य यह है कि '.ToString()' उपलब्ध है केवल संकलक में एक विशेष अपवाद के कारण है जो 'ऑब्जेक्ट' के सदस्यों को कुछ प्रकारों के लिए भी जोड़ता है जो वास्तव में 'ऑब्जेक्ट' से प्राप्त नहीं होते हैं। – hvd

7

MSDN भ्रम की स्थिति पैदा हो सकता है: Object class: .नेट फ्रेमवर्क वर्ग पदानुक्रम में सभी वर्गों का समर्थन करता है और निम्न स्तर सेवाएं प्रदान करता है व्युत्पन्न कक्षाओं के लिए। यह .NET Framework में सभी वर्गों का अंतिम आधार वर्ग है; यह प्रकार पदानुक्रम की जड़ है।

चेक इस शोध: inherits from object? An investigation into how.

enter image description here

2

हाँ, वे दोनों एक ही बात है, मुझे नहीं लगता कि मैं किसी उल्लेख structs देखा है, लेकिन सभी वस्तुओं (कि परवाह किए बिना अगर आप एक वर्ग की घोषणा या एक struct) वे सब अंततः वस्तु से विरासत, इस Object MSDN article और Structs

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