2011-09-20 22 views
10

एमएसडीएन पर कई स्थानों (जैसे "Creating Windows Runtime Components for JavaScript, in C# and Visual Basic") में, मैंने यह निर्दिष्ट किया है कि, यदि आप .NET में एक कक्षा लिखते हैं जिसे आप जावास्क्रिप्ट से उपयोग करना चाहते हैं, तो आपको इसे एक सीलबंद क्लास बनाना होगा।WinRT प्रकारों को क्यों सील करना है?

यह एक मनमाना प्रतिबंध की तरह लगता है। जावास्क्रिप्ट केवल सीलबंद कक्षाओं के साथ क्यों काम कर सकता है?

+6

क्योंकि COMRT के शीर्ष पर WinRT बनाया गया है और COM विरासत का समर्थन नहीं करता है। * मुहरबंद * कीवर्ड यह सुनिश्चित करता है कि यह किसी भी व्यक्ति को क्रिस्टल स्पष्ट है जो कोड को देखता है कि इस तरह की कक्षा विरासत के माध्यम से एक्स्टेंसिबल नहीं है। –

+1

@ हंस वास्तव में WinRT द्वारा समर्थित विरासत का कुछ रूप है - उदा। आप .NET में 'FrameworkElement' (जो स्वयं एक WinRT क्लास) से प्राप्त कर सकते हैं। और आपको सी ++/सीएक्स में परिभाषित कक्षाओं को मुहरबंद के रूप में चिह्नित करने की आवश्यकता नहीं है, और उनसे भी उत्तराधिकारी हो सकता है। तो यह केवल .NET में WinRT घटकों को स्वत: धोने के लिए एक सीमा प्रतीत होता है, न कि WinRT की एक (COM विरासत) सीमा। –

+4

@ हंस: COM विरासत का समर्थन करता है। हालांकि हम Winrt इंटरफेस में इंटरफ़ेस विरासत की अनुमति नहीं देते हैं। –

उत्तर

7

जावास्क्रिप्ट अनुप्रयोगों से अवगत विंडोज रनटाइम ऑब्जेक्ट्स को जावास्क्रिप्ट परिप्रेक्ष्य से सील कर दिया गया है - आप WinRT ऑब्जेक्ट्स में एक्सपो गुणों को जोड़ नहीं सकते हैं। लेकिन सी ++ और सी # से, Winrt ऑब्जेक्ट्स को विरासत में प्राप्त किया जा सकता है यदि ऑब्जेक्ट विरासत का समर्थन करता है (उदाहरण के लिए अधिकांश ज़ैमल कक्षाएं विरासत का समर्थन करती हैं, लेकिन अधिकांश अन्य नहीं)।

जेएन से WinRT ऑब्जेक्ट्स को सील कर दिया गया है यह सुनिश्चित करने के लिए कि WinR ऑब्जेक्ट वही व्यवहार करता है, चाहे ऐप ने क्या किया है - यदि कोई ऐप किसी ऑब्जेक्ट पर कुछ फ़ंक्शन प्रॉपर्टी को फिर से परिभाषित करता है, तो यह ऐप के अन्य हिस्सों का कारण बन सकता है दुर्व्यवहार करना

+0

सी # पर समान प्रतिबंध, इस वीडियो में 40:15 पर जांचें: http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-531T COM कार्यान्वयन विरासत का समर्थन नहीं करता है। –

+2

@ हंस: इसमें COM के साथ बिल्कुल कुछ नहीं है। विंडोज रनटाइम * नहीं * COM है (इसमें COM के कुछ तत्व हैं, लेकिन यह * बहुत * अलग है)। रनटाइम समर्थन विरासत करता है - ऊपर वर्णित पावेल के रूप में, आप फ्रेम + वर्कमेंट से सी ++/सीएक्स या सी #/वीबी में प्राप्त कर सकते हैं। –

+2

मैं मदद नहीं कर सकता लेकिन "अज्ञात से निकला, संदर्भ गणना करता है: यह बतख होना चाहिए" परीक्षण। इस बारे में ब्लॉगिंग करने के लिए तत्पर हैं। –