मेटाडेटा (सीएलआई): Difference between revisions
No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
| url = | | url = | ||
| magic = 0x424A5342 | | magic = 0x424A5342 | ||
| developer = [[ | | developer = [[माइक्रोसॉफ्ट]],<br />[[एक्मा अंतरराष्ट्रीय]] | ||
| type = | | type = | ||
| extension = {{code|.exe}}, {{code|.dll}}, {{code|.winmd}} | | extension = {{code|.exe}}, {{code|.dll}}, {{code|.winmd}} | ||
Line 15: | Line 15: | ||
| mime = | | mime = | ||
}} | }} | ||
[[सामान्य भाषा अवसंरचना]] सीएलआई (CLI) में [[मेटा डेटा]], [[सामान्य मध्यवर्ती भाषा]] | [[सामान्य भाषा अवसंरचना]] सीएलआई (CLI) में [[मेटा डेटा|डेटा]], [[सामान्य मध्यवर्ती भाषा]] कोड के भीतर एम्बेडेड कुछ डेटा संरचनाओं को संदर्भित करता है जो कोड की उच्च-स्तरीय संरचना का वर्णन करता है। मेटाडेटा असेंबली में परिभाषित सभी [[कक्षा (कंप्यूटर विज्ञान)|क्लास]] और क्लास के सदस्यों का वर्णन करता है, क्लासेस और क्लास [[विधि (कंप्यूटर विज्ञान)]] द्वारा वर्तमान असेंबली किसी अन्य असेंबली को कॉल करेगी। किसी विधि के मेटाडेटा में विधि का पूर्ण विवरण होता है, जिसमें क्लास (असेंबली जिसमें क्लास होती है), और रिटर्न प्रकार की सभी विधि [[पैरामीटर (कंप्यूटर विज्ञान)]] सम्मलित हैं। | ||
सीएलआई भाषाओं के [[संकलक]] की सूची मेटाडेटा उत्पन्न करेगी और इसे [[असेंबली (सीएलआई)]] में कॉमन इंटरमीडिएट | सीएलआई भाषाओं के [[संकलक]] की सूची मेटाडेटा उत्पन्न करेगी और इसे [[असेंबली (सीएलआई)]] में कॉमन इंटरमीडिएट भाषा से स्टोर करेगी। जब रन-टाइम सीएलआई को निष्पादित करता है तो यह सुनिश्चित करने के लिए परीक्षण करेगा कि कॉल की गई विधि का मेटाडेटा समान है जो कॉलिंग विधि में संग्रहीत है। यह सुनिश्चित करता है कि विधि को केवल मापदंडों की उचित संख्या और पूर्णतः उचित पैरामीटर प्रकारों के साथ कॉल किया जा सकता है। | ||
[[विंडोज 8]] और [[विंडोज फोन 8]] में उपस्तिथ [[विंडोज रनटाइम]] एप्लिकेशन प्लेटफॉर्म, किसी भी समर्थित [[प्रोग्रामिंग भाषा]] | [[विंडोज 8]] और [[विंडोज फोन 8]] में उपस्तिथ [[विंडोज रनटाइम]] एप्लिकेशन प्लेटफॉर्म, किसी भी समर्थित [[प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं]] में लिखे गए कोड के लिए [[घटक-उन्मुख प्रोग्रामिंग]] [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] का वर्णन करने के लिए सीएलआई मेटाडेटा प्रारूप का उपयोग करता है। [[सामान्य भाषा रनटाइम]] के भीतर उपयोग में अंतर यह है कि असेंबली में सामान्यतः कोई सीएलआई निर्देश नहीं होता है।<ref>{{cite web |title=Windows Metadata (WinMD) files |url=https://docs.microsoft.com/en-us/uwp/winrt-cref/winmd-files |website=Windows UWP applications |language=en-us}}</ref> | ||
== गुण == | == गुण == | ||
डेवलपर विशेषताओं के माध्यम से | डेवलपर विशेषताओं के माध्यम से कोड में मेटा डेटा जोड़ सकते हैं। दो प्रकार की विशेषताएँ हैं, कस्टम और छद्म कस्टम विशेषताएँ, और डेवलपर के लिए सिंटैक्स कंप्यूटर विज्ञान है। मेटाडेटा उत्पन्न करने के लिए कोड में विशेषताएँ संकलक के लिए संदेश हैं। सीएलआई में, मेटा डेटा जैसे कि इनहेरिटेंस मॉडिफायर्स, स्कोप मॉडिफायर्स, और लगभग कुछ ओपी कोड्स (opcodes) या स्ट्रीम को गुण के रूप में संदर्भित किया जाता है। | ||
कस्टम विशेषता नियमित वर्ग | कस्टम विशेषता नियमित वर्ग है जो गुण [[विरासत|वर्ग]] से प्राप्त होता है। <code>Attribute</code> सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता <code>[''AttributeName''(optional ''parameter'', optional ''name=value'' pairs)]</code> का उपयोग किया जा सकता है। | ||
कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े पैमाने पर किया जाता है। [[विंडोज संचार ढांचा]] सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, ASP.NET इनका उपयोग [[वेब सेवा]]ओं के रूप में विधियों को उजागर करने के लिए करता है, [[LINQ]] उनका उपयोग अंतर्निहित [[डेटाबेस स्कीमा]] में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, [[विजुअल स्टूडियो]] उन्हें साथ समूह की [[संपत्ति (प्रोग्रामिंग)]] के लिए उपयोग करता है। ऑब्जेक्ट, क्लास डेवलपर लागू करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को इंगित करता है <code>[Category]</code> कस्टम विशेषता। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, उदाहरण में दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है: | कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े पैमाने पर किया जाता है। [[विंडोज संचार ढांचा]] सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, ASP.NET इनका उपयोग [[वेब सेवा]]ओं के रूप में विधियों को उजागर करने के लिए करता है, [[LINQ]] उनका उपयोग अंतर्निहित [[डेटाबेस स्कीमा]] में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, [[विजुअल स्टूडियो]] उन्हें साथ समूह की [[संपत्ति (प्रोग्रामिंग)]] के लिए उपयोग करता है। ऑब्जेक्ट, क्लास डेवलपर लागू करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को इंगित करता है <code>[Category]</code> कस्टम विशेषता। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, उदाहरण में दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है: | ||
Line 76: | Line 71: | ||
असेंबली में मेटाडेटा की तालिकाएँ होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा तालिकाओं में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-[[अंश]] मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा तालिका की पहचान करते हैं, और शेष 24 बिट तालिका में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क [[सॉफ़्टवेयर विकास किट]] में नमूना होता है जिसे कहा जाता है {{code|metainfo}} जो असेंबली में मेटाडेटा तालिकाओं को सूचीबद्ध करेगा, चूँकि , यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क SDK द्वारा प्रदान किए गए ILDASM टूल का उपयोग करके देखा जा सकता है। | असेंबली में मेटाडेटा की तालिकाएँ होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा तालिकाओं में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-[[अंश]] मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा तालिका की पहचान करते हैं, और शेष 24 बिट तालिका में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क [[सॉफ़्टवेयर विकास किट]] में नमूना होता है जिसे कहा जाता है {{code|metainfo}} जो असेंबली में मेटाडेटा तालिकाओं को सूचीबद्ध करेगा, चूँकि , यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क SDK द्वारा प्रदान किए गए ILDASM टूल का उपयोग करके देखा जा सकता है। | ||
सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली | सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली भाषा ) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और [[पोर्टेबल निष्पादन योग्य]] (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है। | ||
== प्रतिबिंब == | == प्रतिबिंब == |
Revision as of 23:35, 2 March 2023
This article needs additional citations for verification. (July 2016) (Learn how and when to remove this template message) |
Filename extension | .exe , .dll , .winmd |
---|---|
Magic number | 0x424A5342 |
Developed by | माइक्रोसॉफ्ट, एक्मा अंतरराष्ट्रीय |
Standard | ECMA-335 part II |
सामान्य भाषा अवसंरचना सीएलआई (CLI) में डेटा, सामान्य मध्यवर्ती भाषा कोड के भीतर एम्बेडेड कुछ डेटा संरचनाओं को संदर्भित करता है जो कोड की उच्च-स्तरीय संरचना का वर्णन करता है। मेटाडेटा असेंबली में परिभाषित सभी क्लास और क्लास के सदस्यों का वर्णन करता है, क्लासेस और क्लास विधि (कंप्यूटर विज्ञान) द्वारा वर्तमान असेंबली किसी अन्य असेंबली को कॉल करेगी। किसी विधि के मेटाडेटा में विधि का पूर्ण विवरण होता है, जिसमें क्लास (असेंबली जिसमें क्लास होती है), और रिटर्न प्रकार की सभी विधि पैरामीटर (कंप्यूटर विज्ञान) सम्मलित हैं।
सीएलआई भाषाओं के संकलक की सूची मेटाडेटा उत्पन्न करेगी और इसे असेंबली (सीएलआई) में कॉमन इंटरमीडिएट भाषा से स्टोर करेगी। जब रन-टाइम सीएलआई को निष्पादित करता है तो यह सुनिश्चित करने के लिए परीक्षण करेगा कि कॉल की गई विधि का मेटाडेटा समान है जो कॉलिंग विधि में संग्रहीत है। यह सुनिश्चित करता है कि विधि को केवल मापदंडों की उचित संख्या और पूर्णतः उचित पैरामीटर प्रकारों के साथ कॉल किया जा सकता है।
विंडोज 8 और विंडोज फोन 8 में उपस्तिथ विंडोज रनटाइम एप्लिकेशन प्लेटफॉर्म, किसी भी समर्थित प्रोग्रामिंग भाषाओं में लिखे गए कोड के लिए घटक-उन्मुख प्रोग्रामिंग इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का वर्णन करने के लिए सीएलआई मेटाडेटा प्रारूप का उपयोग करता है। सामान्य भाषा रनटाइम के भीतर उपयोग में अंतर यह है कि असेंबली में सामान्यतः कोई सीएलआई निर्देश नहीं होता है।[1]
गुण
डेवलपर विशेषताओं के माध्यम से कोड में मेटा डेटा जोड़ सकते हैं। दो प्रकार की विशेषताएँ हैं, कस्टम और छद्म कस्टम विशेषताएँ, और डेवलपर के लिए सिंटैक्स कंप्यूटर विज्ञान है। मेटाडेटा उत्पन्न करने के लिए कोड में विशेषताएँ संकलक के लिए संदेश हैं। सीएलआई में, मेटा डेटा जैसे कि इनहेरिटेंस मॉडिफायर्स, स्कोप मॉडिफायर्स, और लगभग कुछ ओपी कोड्स (opcodes) या स्ट्रीम को गुण के रूप में संदर्भित किया जाता है।
कस्टम विशेषता नियमित वर्ग है जो गुण वर्ग से प्राप्त होता है। Attribute
सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता [AttributeName(optional parameter, optional name=value pairs)]
का उपयोग किया जा सकता है।
कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े पैमाने पर किया जाता है। विंडोज संचार ढांचा सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, ASP.NET इनका उपयोग वेब सेवाओं के रूप में विधियों को उजागर करने के लिए करता है, LINQ उनका उपयोग अंतर्निहित डेटाबेस स्कीमा में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, विजुअल स्टूडियो उन्हें साथ समूह की संपत्ति (प्रोग्रामिंग) के लिए उपयोग करता है। ऑब्जेक्ट, क्लास डेवलपर लागू करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को इंगित करता है [Category]
कस्टम विशेषता। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, उदाहरण में दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = csharp> वर्ग CustomAttribute: विशेषता {
निजी int paramNumber = 0; निजी स्ट्रिंग टिप्पणी =;
सार्वजनिक कस्टम एट्रिब्यूट () {} सार्वजनिक कस्टम एट्रिब्यूट (इंट संख्या) { paramNumber = num; }
सार्वजनिक स्ट्रिंग टिप्पणी { सेट {टिप्पणी = मान; } }
} </वाक्यविन्यास हाइलाइट>
वर्ग का नाम विशेषता नाम पर मैप किया गया है। विजुअल सी शार्प | विजुअल सी # कंपाइलर स्वचालित रूप से स्ट्रिंग जोड़ता हैAttribute
किसी भी विशेषता नाम के अंत में। परिणाम स्वरुप , प्रत्येक विशेषता वर्ग का नाम इस स्ट्रिंग के साथ समाप्त होना चाहिए, किन्तुइसके बिना विशेषता को परिभाषित करना कानूनी है Attribute
-प्रत्यय। किसी आइटम के लिए विशेषता चिपकाते समय, कंपाइलर शाब्दिक नाम और नाम दोनों की तलाश करेगा Attribute
अंत में जोड़ा गया, i। इ। यदि आपको लिखना है [Custom]
संकलक दोनों की तलाश करेगा Custom
और CustomAttribute
. यदि दोनों उपस्तिथ हैं, तो संकलक विफल हो जाता है। विशेषता के साथ उपसर्ग किया जा सकता है@
यदि आप अस्पष्टता का जोखिम नहीं उठाना चाहते हैं, तो लेखन [@Custom]
मेल नहीं खाएगा CustomAttribute
. विशेषता का उपयोग क्लास के निर्माता को आमंत्रित करता है। ओवरलोडेड कंस्ट्रक्टर समर्थित हैं। नाम-मूल्य जोड़े गुणों के लिए मैप किए जाते हैं, नाम संपत्ति के नाम को दर्शाता है और आपूर्ति मूल्य संपत्ति द्वारा निर्धारित किया जाता है।
कभी-कभी इस बात को लेकर अस्पष्टता होती है कि आप किस विशेषता को जोड़ रहे हैं। निम्नलिखित कोड पर विचार करें:
<वाक्यविन्यास प्रकाश लैंग = csharp> [नारंगी] सार्वजनिक int उदाहरण विधि (स्ट्रिंग इनपुट) {
// मेथड बॉडी यहां जाती है
} </वाक्यविन्यास हाइलाइट>
नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है ExampleMethod
, इसका रिटर्न वैल्यू, या संभवतः पूरी असेंबली? इस मामले में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से चिपकाए जाने के रूप में माना जाएगा। यदि यह इरादा नहीं है, या यदि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लिखना [return: Orange]
वापसी मान को नारंगी के रूप में चिह्नित करेगा, [assembly: Orange]
पूरी असेंबली को चिह्नित करेगा। वैध लक्ष्य हैं assembly
, field
, event
, method
, module
, param
, property
, return
और type
.
छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं की तरह ही किया जाता है किन्तुउनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के पास विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस तरह की विशेषताओं के साथ चिह्नित कोड को अलग तरीके से संभालता है। जैसे गुण Serializable
और Obsolete
छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। ILAsm द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।[clarification needed]
मेटाडेटा स्टोरेज
असेंबली में मेटाडेटा की तालिकाएँ होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा तालिकाओं में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-अंश मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा तालिका की पहचान करते हैं, और शेष 24 बिट तालिका में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क सॉफ़्टवेयर विकास किट में नमूना होता है जिसे कहा जाता है metainfo
जो असेंबली में मेटाडेटा तालिकाओं को सूचीबद्ध करेगा, चूँकि , यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क SDK द्वारा प्रदान किए गए ILDASM टूल का उपयोग करके देखा जा सकता है।
सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली भाषा ) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और पोर्टेबल निष्पादन योग्य (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है।
प्रतिबिंब
रिफ्लेक्शन सीएलआई मेटाडेटा को पढ़ने के लिए उपयोग किया जाने वाला अप्लिकेशन प्रोग्रामिंग अंतरफलक है। प्रतिबिंब एपीआई मेटाइन्फो जैसे उपकरणों द्वारा प्रदान किए गए शाब्दिक दृश्य के अतिरिक्त मेटाडेटा का तार्किक दृश्य प्रदान करता है। .NET फ्रेमवर्क के संस्करण 1.1 में प्रतिबिंब का उपयोग क्लासओं और उनके सदस्यों के विवरण का निरीक्षण करने और विधियों को लागू करने के लिए किया जा सकता है। चूँकि , यह किसी विधि के लिए सीएलआई तक रनटाइम पहुँच की अनुमति नहीं देता है। ढांचे का संस्करण 2.0 सीआईएल को विधि प्राप्त करने की अनुमति देता है।
अन्य मेटाडेटा उपकरण
इसके अतिरिक्त System.Reflection
नेमस्पेस, अन्य उपकरण भी उपलब्ध हैं जिनका उपयोग मेटाडेटा को संभालने के लिए किया जा सकता है। Microsoft .NET फ्रेमवर्क CLR मेटाडेटा हेरफेर लाइब्रेरी को शिप करता है जिसे देसी कोड में लागू किया गया है। मेटाडेटा को पुनः प्राप्त करने और हेरफेर करने के लिए तृतीय-पक्ष टूल में सम्मलित हैं PostSharp और /सेसिल मोनो सेसिल का भी उपयोग किया जा सकता है।
यह भी देखें
संदर्भ
- ↑ "Windows Metadata (WinMD) files". Windows UWP applications (in English).