2010-05-31 10 views
13

क्या सी # 4.0 का ExpandoObject समर्थन Prototype-based inheritance है? यदि नहीं, तो क्यों नहीं (यह डिजाइन द्वारा था?) और यह कैसे लागू किया जा सकता है? यदि हां, यह कैसे काम करता है और जावास्क्रिप्ट में जिस तरह से काम करता है उससे तुलना में क्या अंतर हैं?क्या सी # 4.0 का एक्सपोन्डोब्जेक्ट प्रोटोटाइप-आधारित विरासत का समर्थन करता है?

+0

दिलचस्प सवाल। मुझे लगता है कि सबसे बड़ी समस्या मैं सोच सकता हूं उदाहरण के तरीकों - यदि आपके पास कोई है, तो आप 'इस' का संदर्भ कैसे दे सकते हैं? सभी संपत्तियों को प्रतिलिपि बनाना काफी आसान होना चाहिए, लेकिन मुझे लगता है कि आपका प्रश्न उससे भी बड़ा है। आपको इसकी ज़रूरत क्यों होगी? अकादमिक रुचि? – Kobi

+0

सामान्य रुचि, अकादमिक से अधिक ... अपने 4.0 संस्करण में गतिशील टाइपिंग की दिशा में सी # के नए-नए अभिविन्यास को देखते हुए, सवाल मेरे दिमाग में आया कि यह कितना दूर है। प्रोटोटाइप-आधारित विरासत, कुछ गतिशील रूप से टाइप की गई भाषाओं की एक विशेषता है। – luvieere

उत्तर

20

क्या सी # 4.0 का एक्सपोन्डोब्जेक्ट प्रोटोटाइप-आधारित विरासत का समर्थन करता है?

सबसे पहले, ध्यान दें कि ExpandoObject क्लास में सी # 4.0 के साथ कुछ भी नहीं है। सी # टीम ने इस वस्तु को डिजाइन या कार्यान्वित नहीं किया था। सी # 4.0 और ExpandoObject क्लास केवल .NET के नवीनतम संस्करण के साथ दोनों जहाज के साथ होता है।

आपके प्रश्न का उत्तर करने के लिए मैं ExpandoObject, जो स्पष्ट रूप से कहा गया है के लिए documentation का उल्लेख:

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

दस्तावेज़ीकरण के अनुसार, यदि आप केवल सदस्यों के आविष्कार के ऊपर कस्टम प्रेषण अर्थशास्त्र चाहते हैं तो डायनामिक ऑब्जेक्ट क्लास का उपयोग करें।

यदि नहीं, तो क्यों नहीं? क्या यह डिजाइन द्वारा था?

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

इसे कैसे कार्यान्वित किया जा सकता है?

डायनामिक ऑब्जेक्ट ऑब्जेक्ट का उपयोग करें। अपना खुद का प्रोटोटाइप विरासत तंत्र लिखें।

यदि हां, यह कैसे काम करता है और जावास्क्रिप्ट में काम करने के तरीके में मतभेद हैं?

आप अपने खुद के प्रोटोटाइप विरासत है कि वास्तव में JScript की तरह है लिखने के लिए प्रयास कर रहे हैं, मैं अत्यंत ध्यान से ECMAScript विनिर्देश को पढ़ने के लिए प्रोत्साहित करते हैं। प्रोटोटाइप विरासत सरल दिखती है, लेकिन वहां सूक्ष्मताएं हैं जो अधिकांश लोगों को गलत होती है। उदाहरण के लिए, यहां तक ​​कि जेस्क्रिप्ट विशेषज्ञों को अक्सर यह छोटी पहेली गलत होती है। यह जेस्क्रिप्ट कोड प्रिंट क्या करता है?

var Animal = new Object(); 
function Reptile() { } 
Reptile.prototype = Animal; 
var lizard = new Reptile(); 
print(lizard instanceof Reptile); // this is true 
print(lizard.constructor == Reptile); // is this true or false? explain your answer! 

प्रोटोटाइप विरासत हमेशा ऐसा करने के तरीके से काम नहीं करती है जो आपको लगता है! इस प्रिंट के बारे में एक स्पष्टीकरण के लिए और क्यों, my article on the subject देखें।

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