मेटाडेटा (सीएलआई): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Common Language Infrastructure metadata about classes and class members}}
{{Short description|Common Language Infrastructure metadata about classes and class members}}
{{Use mdy dates|date=January 2019}}
 
{{Use American English|date=January 2019}}
{{More references | date=July 2016}}
{{Infobox file format
{{Infobox file format
| name          = सीएलआई मेटाडेटा, ऑन-डिस्क प्रतिनिधित्व
| name          = सीएलआई मेटाडेटा, ऑन-डिस्क प्रतिनिधित्व
Line 9: Line 7:
| url          =  
| url          =  
| magic        = 0x424A5342
| magic        = 0x424A5342
| developer    = [[Microsoft]],<br />[[Ecma International]]
| developer    = [[माइक्रोसॉफ्ट]],<br />[[एक्मा अंतरराष्ट्रीय]]
| type          =  
| type          =  
| extension    = {{code|.exe}}, {{code|.dll}}, {{code|.winmd}}
| extension    = {{code|.exe}}, {{code|.dll}}, {{code|.winmd}}
Line 15: Line 13:
| mime          =  
| mime          =  
}}
}}
[[सामान्य भाषा अवसंरचना]] सीएलआई (CLI) में [[मेटा डेटा]], [[सामान्य मध्यवर्ती भाषा]] सीएलआई कोड के भीतर एम्बेडेड कुछ डेटा संरचनाओं को संदर्भित करता है जो कोड की उच्च-स्तरीय संरचना का वर्णन करता है। मेटाडेटा असेंबली में परिभाषित सभी [[कक्षा (कंप्यूटर विज्ञान)|क्लास (कंप्यूटर विज्ञान)]] और क्लास सदस्यों का वर्णन करता है, और क्लासेस और क्लास [[विधि (कंप्यूटर विज्ञान)]] जिसे वर्तमान असेंबली किसी अन्य असेंबली से कॉल करेगी। किसी विधि के मेटाडेटा में विधि का पूरा विवरण होता है, जिसमें क्लास (और असेंबली जिसमें क्लास होती है), रिटर्न प्रकार और सभी विधि [[पैरामीटर (कंप्यूटर विज्ञान)]] सम्मलित हैं।
[[सामान्य भाषा अवसंरचना|कॉमन भाषा इन्फ्रास्ट्रक्चर]] सीएलआई (CLI) में [[मेटा डेटा|मेटाडेटा]], [[सामान्य मध्यवर्ती भाषा|कॉमन इंटरमीडिएट भाषा]] कोड के भीतर एम्बेडेड कुछ डेटा संरचनाओं को संदर्भित करता है जो कोड की उच्च-स्तरीय संरचना का वर्णन करता है। मेटाडेटा असेंबली में परिभाषित सभी [[कक्षा (कंप्यूटर विज्ञान)|क्लास]] और क्लास के सदस्यों का वर्णन करता है, क्लासेस और क्लास [[विधि (कंप्यूटर विज्ञान)]] द्वारा वर्तमान असेंबली किसी अन्य असेंबली को कॉल करेगी। किसी विधि के मेटाडेटा में विधि का पूर्ण विवरण होता है, जिसमें क्लास (असेंबली जिसमें क्लास होती है), और रिटर्न प्रकार की सभी विधि [[पैरामीटर (कंप्यूटर विज्ञान)]] सम्मलित हैं।


सीएलआई भाषाओं के [[संकलक]] की सूची मेटाडेटा उत्पन्न करेगी और इसे [[असेंबली (सीएलआई)]] में कॉमन इंटरमीडिएट लैंग्वेज से स्टोर करेगी।जब रन-टाइम सीएलआई को निष्पादित करता है तो यह सुनिश्चित करने के लिए जाँच करेगा कि कॉल की गई विधि का मेटाडेटा मेटाडेटा के समान है जो कॉलिंग विधि में संग्रहीत है। यह सुनिश्चित करता है कि विधि को केवल मापदंडों की सही संख्या और बिल्कुल सही पैरामीटर प्रकारों के साथ ही बुलाया जा सकता है।
सीएलआई भाषा के [[संकलक|कंपाइलर]] की सूची मेटाडेटा उत्पन्न करेगी और इसे [[असेंबली (सीएलआई)]] में कॉमन इंटरमीडिएट भाषा से स्टोर करेगी। जब रन-टाइम सीएलआई को निष्पादित करता है तो यह सुनिश्चित करने के लिए परीक्षण करेगा कि कॉल की गई विधि का मेटाडेटा समान है जो कॉलिंग विधि में संग्रहीत है। यह सुनिश्चित करता है कि विधि को केवल मापदंडों की उचित संख्या और पूर्णतः उचित पैरामीटर प्रकारों के साथ कॉल किया जा सकता है।


[[विंडोज 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>
[[विंडोज 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 या स्ट्रीम नहीं है, को भी एट्रिब्यूट्स के रूप में संदर्भित किया जाता है।
डेवलपर विशेषताओं के माध्यम से कोड में मेटा डेटा जोड़ सकते हैं। दो प्रकार की विशेषताएँ हैं, कस्टम और छद्म कस्टम विशेषताएँ, और डेवलपर के लिए सिंटैक्स कंप्यूटर विज्ञान है। मेटाडेटा उत्पन्न करने के लिए कोड में विशेषताएँ संकलक के लिए संदेश हैं। सीएलआई में, मेटा डेटा जैसे कि इनहेरिटेंस मॉडिफायर्स, स्कोप मॉडिफायर्स, और लगभग कुछ ओपी कोड्स (opcodes) या स्ट्रीम को गुण के रूप में संदर्भित किया जाता है।


कस्टम विशेषता नियमित वर्ग (कंप्यूटिंग) है जो से [[विरासत]] में मिलती है <code>Attribute</code> क्लास। सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता का उपयोग किया जा सकता है: <code>[''AttributeName''(optional ''parameter'', optional ''name=value'' pairs)]</code> के रूप में:
कस्टम विशेषता नियमित वर्ग है जो गुण [[विरासत|वर्ग]] से प्राप्त होता है।सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता <code>[''AttributeName''(optional ''parameter'', optional ''name=value'' pairs)]</code> का उपयोग किया जा सकता है।
<वाक्यविन्यास प्रकाश लैंग = csharp>
[Custom]
[रिवाज़]
[कस्टम(1)]
[कस्टम (1, टिप्पणी = हाँ )]
</वाक्यविन्यास हाइलाइट>


कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े पैमाने पर किया जाता है। [[विंडोज संचार ढांचा]] सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, ASP.NET इनका उपयोग [[वेब सेवा]]ओं के रूप में विधियों को उजागर करने के लिए करता है, [[LINQ]] उनका उपयोग अंतर्निहित [[डेटाबेस स्कीमा]] में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, [[विजुअल स्टूडियो]] उन्हें साथ समूह की [[संपत्ति (प्रोग्रामिंग)]] के लिए उपयोग करता है। ऑब्जेक्ट, क्लास डेवलपर लागू करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को इंगित करता है <code>[Category]</code> कस्टम विशेषता। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा। जब संकलक  कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है।  उदाहरण के रूप में, उदाहरण में दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है:
  [Custom(1)]


<वाक्यविन्यास प्रकाश लैंग = csharp>
[Custom(1, Comment="yes")]
वर्ग CustomAttribute: विशेषता
कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े स्तर पर किया जाता है। [[विंडोज संचार ढांचा|विंडोज संचार रूप]] सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, एएसपी.नेट (ASP.NET) इनका उपयोग [[वेब सेवा|वेब सेवाओं]] के रूप में विधियों को प्रकाशित करने के लिए करता है, लिंक ([[LINQ]]) उनका उपयोग अंतर्निहित [[डेटाबेस स्कीमा]] में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, [[विजुअल स्टूडियो]] उन्हें वस्तु के गुणों को [[संपत्ति (प्रोग्रामिंग)|समूहित]] करने के लिए उपयोग करता है। <code>[Category]</code> कस्टम विशेषता को ऑब्जेक्ट, क्लास डेवलपर प्रारम्भ करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को प्रदर्शित करता है। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा की जाती है। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है:
{
  निजी int paramNumber = 0;
  निजी स्ट्रिंग टिप्पणी =;


  सार्वजनिक कस्टम एट्रिब्यूट () {}
  class CustomAttribute : Attribute
  सार्वजनिक कस्टम एट्रिब्यूट (इंट संख्या) { paramNumber = num; }
  {


   सार्वजनिक स्ट्रिंग टिप्पणी
   private int paramNumber = 0;
  private string comment = "";
 
    public CustomAttribute() { }
    public CustomAttribute(int num) { paramNumber = num; }
 
    public String Comment
   {
   {
      सेट {टिप्पणी = मान; }
      set { comment = value; }
   }
   }
}
</वाक्यविन्यास हाइलाइट>


वर्ग का नाम विशेषता नाम पर मैप किया गया है। विजुअल सी शार्प | विजुअल सी # कंपाइलर स्वचालित रूप से स्ट्रिंग जोड़ता है<code>Attribute</code>किसी भी विशेषता नाम के अंत में। परिणाम स्वरुप , प्रत्येक विशेषता वर्ग का नाम इस स्ट्रिंग के साथ समाप्त होना चाहिए, किन्तुइसके बिना  विशेषता को परिभाषित करना कानूनी है <code>Attribute</code>-प्रत्यय। किसी आइटम के लिए विशेषता चिपकाते समय, कंपाइलर शाब्दिक नाम और नाम दोनों की तलाश करेगा <code>Attribute</code> अंत में जोड़ा गया, i। इ। यदि   आपको लिखना है <code>[Custom]</code> संकलक दोनों की तलाश करेगा <code>Custom</code> और <code>CustomAttribute</code>. यदि दोनों उपस्तिथ हैं, तो संकलक विफल हो जाता है। विशेषता के साथ उपसर्ग किया जा सकता है<code>@</code>यदि आप अस्पष्टता का जोखिम नहीं उठाना चाहते हैं, तो लेखन <code>[@Custom]</code> मेल नहीं खाएगा <code>CustomAttribute</code>. विशेषता का उपयोग क्लास के निर्माता को आमंत्रित करता है। ओवरलोडेड कंस्ट्रक्टर समर्थित हैं। नाम-मूल्य जोड़े गुणों के लिए मैप किए जाते हैं, नाम संपत्ति के नाम को दर्शाता है और आपूर्ति मूल्य संपत्ति द्वारा निर्धारित किया जाता है।
}
 
 
 
वर्ग का नाम विशेषता नाम पर मैप किया गया है। विजुअल सी कंपाइलर स्वचालित रूप से किसी भी विशेषता नाम के अंत में स्ट्रिंग <code>Attribute</code> जोड़ता है । परिणाम स्वरुप, प्रत्येक विशेषता वर्ग का नाम इस स्ट्रिंग के साथ समाप्त होना चाहिए, <code>Attribute</code>-प्रत्यय के बिना विशेषता को परिभाषित करना विधि है। किसी आइटम के लिए विशेषता को परिभाषित करते समय, कंपाइलर शाब्दिक नाम और अंत में जोड़े गए विशेषता वाले नाम दोनों का अनुसंधान करेगा। <code>Attribute</code> अंत में जोड़ा गया। यदि आप <code>[Custom]</code> लिखना चाहते हैं तो संकलक <code>Custom</code> और <code>CustomAttribute</code> दोनों का अनुसंधान करेगा।यदि दोनों उपस्तिथ हैं, तो संकलक विफल हो जाता है। यदि आप अस्पष्टता का संकट नहीं उठाना चाहते हैं, तो विशेषता को <code>@</code> के साथ उपसर्ग किया जा सकता है, इसलिए <code>[@Custom]</code> लिखना <code>CustomAttribute</code> से युग्मित नहीं होगा। विशेषता का उपयोग क्लास के निर्माता को आमंत्रित करता है। ओवरलोडेड कंस्ट्रक्टर समर्थित हैं। नाम-मूल्य जोड़े गुणों के लिए मैप किए जाते हैं, नाम संपत्ति के नाम को दर्शाता है और आपूर्ति मूल्य संपत्ति द्वारा निर्धारित किया जाता है।


कभी-कभी इस बात को लेकर अस्पष्टता होती है कि आप किस विशेषता को जोड़ रहे हैं। निम्नलिखित कोड पर विचार करें:
कभी-कभी इस बात को लेकर अस्पष्टता होती है कि आप किस विशेषता को जोड़ रहे हैं। निम्नलिखित कोड पर विचार करें:


<वाक्यविन्यास प्रकाश लैंग = csharp>
    [Orange]
[नारंगी]
सार्वजनिक int उदाहरण विधि (स्ट्रिंग इनपुट)
{
    // मेथड बॉडी यहां जाती है
}
</वाक्यविन्यास हाइलाइट>


नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है <code>ExampleMethod</code>, इसका रिटर्न वैल्यू, या संभवतः  पूरी असेंबली? इस मामले में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से चिपकाए जाने के रूप में माना जाएगा। यदि यह इरादा नहीं है, या यदि लेखक अपने कोड को स्पष्ट करना चाहता है, तो  विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लिखना <code>[return: Orange]</code> वापसी मान को नारंगी के रूप में चिह्नित करेगा, <code>[assembly: Orange]</code> पूरी असेंबली को चिह्नित करेगा। वैध लक्ष्य हैं <code>assembly</code>, <code>field</code>, <code>event</code>, <code>method</code>, <code>module</code>, <code>param</code>, <code>property</code>, <code>return</code> और <code>type</code>.
  public int ExampleMethod(string input)


छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं की तरह ही किया जाता है किन्तुउनके पास कस्टम हैंडलर नहीं होता है; जबकि  संकलक के पास विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस तरह की विशेषताओं के साथ चिह्नित कोड को अलग तरीके से संभालता है। जैसे गुण <code>Serializable</code> और <code>Obsolete</code> छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। [[ILAsm]] द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।{{Clarify me|date=March 2008}}
<!-- What the hell does this mean? Was something vandalized out? If someone can make sense, please add this back.
A pseudo custom attribute is metadata that  public class MyClass
  {
  {
    ...
 
  //method body goes here
 
  }
  }
-->
 
 
 
नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है <code>ExampleMethod</code> है, इसका रिटर्न वैल्यू, या संभवतः पूर्ण असेंबली है? इस विषय में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से युग्मित के रूप में माना जाएगा। यह उद्देश्य नहीं है, कि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लेखन <code>[return: Orange]</code> रिटर्न मान को नारंगी के रूप में चिह्नित करेगा, <code>[assembly: Orange]</code> पूर्ण असेंबली को चिह्नित करेगा। वैध लक्ष्य  <code>assembly</code>, <code>field</code>, <code>event</code>, <code>method</code>, <code>module</code>, <code>param</code>, <code>property</code>, <code>return</code> और <code>type</code> हैं।
 
छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं के जैसे ही किया जाता है किन्तु उनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के निकट विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस प्रकार की विशेषताओं के साथ चिह्नित कोड को भिन्न विधि से संभालता है। जैसे गुण <code>Serializable</code> और <code>Obsolete</code> छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। [[ILAsm]] द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।{{Clarify me|date=March 2008}}
 
 




== मेटाडेटा स्टोरेज ==
== मेटाडेटा स्टोरेज ==
असेंबली में मेटाडेटा की तालिकाएँ होती हैं। इन सारणियों को सीएलआई   विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा तालिकाओं में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई   कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-[[अंश]] मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा तालिका की पहचान करते हैं, और शेष 24 बिट तालिका में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क [[सॉफ़्टवेयर विकास किट]] में नमूना होता है जिसे कहा जाता है {{code|metainfo}} जो असेंबली में मेटाडेटा तालिकाओं को सूचीबद्ध करेगा, चूँकि , यह जानकारी किसी डेवलपर के लिए संभवतः   ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क SDK द्वारा प्रदान किए गए ILDASM टूल का उपयोग करके देखा जा सकता है।
असेंबली में मेटाडेटा की सारणी होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा सारणी में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-[[अंश]] मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा सारणी की पहचान करते हैं, और शेष 24 बिट सारणी में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क [[सॉफ़्टवेयर विकास किट]] में मॉडल होता है जिसे {{code|metainfo}} कहा जाता है जो असेंबली में मेटाडेटा सारणी को सूचीबद्ध करेगा, चूँकि, यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क एसडीके द्वारा प्रदान किए गए I आईएलडीएएसएम उपकरण का उपयोग करके देखा जा सकता है।


सीएलआई   मानक में, मेटाडेटा को ILAsm (असेंबली लैंग्वेज) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और [[पोर्टेबल निष्पादन योग्य]] (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है।
सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली भाषा) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और [[पोर्टेबल निष्पादन योग्य]] (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है।


== प्रतिबिंब ==
== प्रतिबिंब ==
{{main|प्रतिबिंब (कंप्यूटर विज्ञान)#C.23|l1=में प्रतिबिंब C#|प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)}}
{{main|प्रतिबिंब (कंप्यूटर विज्ञान) C.23|l1=में प्रतिबिंब C|प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)}}
रिफ्लेक्शन सीएलआई मेटाडेटा को पढ़ने के लिए उपयोग किया जाने वाला [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] है। प्रतिबिंब एपीआई मेटाइन्फो जैसे उपकरणों द्वारा प्रदान किए गए शाब्दिक दृश्य के अतिरिक्त मेटाडेटा का  तार्किक दृश्य प्रदान करता है। .NET फ्रेमवर्क के संस्करण 1.1 में प्रतिबिंब का उपयोग क्लासओं और उनके सदस्यों के विवरण का निरीक्षण करने और विधियों को लागू करने के लिए किया जा सकता है। चूँकि , यह किसी विधि के लिए सीएलआई   तक रनटाइम पहुँच की अनुमति नहीं देता है। ढांचे का संस्करण 2.0 सीआईएल को  विधि प्राप्त करने की अनुमति देता है।
 
प्रतिबिंब सीएलआई मेटाडेटा को पढ़ने के लिए उपयोग किया जाने वाला [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] है। प्रतिबिंब एपीआई मेटाइन्फो जैसे उपकरणों द्वारा प्रदान किए गए शाब्दिक दृश्य के अतिरिक्त मेटाडेटा का  तार्किक दृश्य प्रदान करता है। .NET फ्रेमवर्क के संस्करण 1.1 में प्रतिबिंब का उपयोग क्लासओं और उनके सदस्यों के विवरण का निरीक्षण करने और विधियों को प्रारम्भ करने के लिए किया जा सकता है। चूँकि, यह किसी विधि के लिए सीएलआई तक रनटाइम पहुँच की अनुमति नहीं देता है। प्रारूप का संस्करण 2.0 सीआईएल को  विधि प्राप्त करने की अनुमति देता है।


== अन्य मेटाडेटा उपकरण ==
== अन्य मेटाडेटा उपकरण ==
इसके अतिरिक्त {{code|System{{Not a typo|.}}Reflection}} नेमस्पेस, अन्य उपकरण भी उपलब्ध हैं जिनका उपयोग मेटाडेटा को संभालने के लिए किया जा सकता है। Microsoft .NET फ्रेमवर्क CLR मेटाडेटा हेरफेर लाइब्रेरी को शिप करता है जिसे [[देसी कोड]] में लागू किया गया है। मेटाडेटा को पुनः प्राप्त करने और हेरफेर करने के लिए तृतीय-पक्ष टूल में सम्मलित हैं [https://web.archive.org/web/20070205053546/http://www.postsharp.org/ PostSharp] और [http://www.mono-project.com /सेसिल मोनो सेसिल] का भी उपयोग किया जा सकता है।
इसके अतिरिक्त {{code|System{{Not a typo|.}}Reflection}} नेमस्पेस, अन्य उपकरण भी उपलब्ध हैं जिनका उपयोग मेटाडेटा को संभालने के लिए किया जा सकता है। माइक्रोसॉफ्ट .नेट (Microsoft .NET) फ्रेमवर्क सीएलआर मेटाडेटा का आदान-प्रदान करके लाइब्रेरी को शिप करता है जिसे [[देसी कोड|नेटिव कोड]] में प्रारम्भ किया गया है। मेटाडेटा को पुनः प्राप्त करने और आदान-प्रदान करने के लिए तृतीय-पक्ष उपकरण में [https://web.archive.org/web/20070205053546/http://www.postsharp.org/ पोस्टशर्प] और [http://www.mono-project.com मोनो सेसिल] का भी उपयोग किया जा सकता है।


== यह भी देखें ==
== यह भी देखें ==
Line 91: Line 91:
{{Reflist}}
{{Reflist}}


{{Common Language Infrastructure}}
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category: सामान्य भाषा अवसंरचना]]  
[[Category:Articles with invalid date parameter in template]]
 
[[Category:CS1 English-language sources (en)]]
 
[[Category:Collapse templates]]
 
[[Category: Machine Translated Page]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia articles needing clarification from March 2008]]

Latest revision as of 13:42, 17 March 2023

सीएलआई मेटाडेटा, ऑन-डिस्क प्रतिनिधित्व
Filename extension
.exe, .dll, .winmd
Magic number0x424A5342
Developed byमाइक्रोसॉफ्ट,
एक्मा अंतरराष्ट्रीय
StandardECMA-335 part II

कॉमन भाषा इन्फ्रास्ट्रक्चर सीएलआई (CLI) में मेटाडेटा, कॉमन इंटरमीडिएट भाषा कोड के भीतर एम्बेडेड कुछ डेटा संरचनाओं को संदर्भित करता है जो कोड की उच्च-स्तरीय संरचना का वर्णन करता है। मेटाडेटा असेंबली में परिभाषित सभी क्लास और क्लास के सदस्यों का वर्णन करता है, क्लासेस और क्लास विधि (कंप्यूटर विज्ञान) द्वारा वर्तमान असेंबली किसी अन्य असेंबली को कॉल करेगी। किसी विधि के मेटाडेटा में विधि का पूर्ण विवरण होता है, जिसमें क्लास (असेंबली जिसमें क्लास होती है), और रिटर्न प्रकार की सभी विधि पैरामीटर (कंप्यूटर विज्ञान) सम्मलित हैं।

सीएलआई भाषा के कंपाइलर की सूची मेटाडेटा उत्पन्न करेगी और इसे असेंबली (सीएलआई) में कॉमन इंटरमीडिएट भाषा से स्टोर करेगी। जब रन-टाइम सीएलआई को निष्पादित करता है तो यह सुनिश्चित करने के लिए परीक्षण करेगा कि कॉल की गई विधि का मेटाडेटा समान है जो कॉलिंग विधि में संग्रहीत है। यह सुनिश्चित करता है कि विधि को केवल मापदंडों की उचित संख्या और पूर्णतः उचित पैरामीटर प्रकारों के साथ कॉल किया जा सकता है।

विंडोज 8 और विंडोज फोन 8 में उपस्तिथ विंडोज रनटाइम एप्लिकेशन प्लेटफॉर्म, किसी भी समर्थित प्रोग्रामिंग भाषाओं में लिखे गए कोड के लिए घटक-उन्मुख प्रोग्रामिंग इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का वर्णन करने के लिए सीएलआई मेटाडेटा प्रारूप का उपयोग करता है। कॉमन भाषा रनटाइम के भीतर उपयोग में अंतर यह है कि असेंबली में सामान्यतः कोई सीएलआई निर्देश नहीं होता है।[1]


गुण

डेवलपर विशेषताओं के माध्यम से कोड में मेटा डेटा जोड़ सकते हैं। दो प्रकार की विशेषताएँ हैं, कस्टम और छद्म कस्टम विशेषताएँ, और डेवलपर के लिए सिंटैक्स कंप्यूटर विज्ञान है। मेटाडेटा उत्पन्न करने के लिए कोड में विशेषताएँ संकलक के लिए संदेश हैं। सीएलआई में, मेटा डेटा जैसे कि इनहेरिटेंस मॉडिफायर्स, स्कोप मॉडिफायर्स, और लगभग कुछ ओपी कोड्स (opcodes) या स्ट्रीम को गुण के रूप में संदर्भित किया जाता है।

कस्टम विशेषता नियमित वर्ग है जो गुण वर्ग से प्राप्त होता है।सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता [AttributeName(optional parameter, optional name=value pairs)] का उपयोग किया जा सकता है।

[Custom]
[Custom(1)]
[Custom(1, Comment="yes")]

कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े स्तर पर किया जाता है। विंडोज संचार रूप सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, एएसपी.नेट (ASP.NET) इनका उपयोग वेब सेवाओं के रूप में विधियों को प्रकाशित करने के लिए करता है, लिंक (LINQ) उनका उपयोग अंतर्निहित डेटाबेस स्कीमा में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, विजुअल स्टूडियो उन्हें वस्तु के गुणों को समूहित करने के लिए उपयोग करता है। [Category] कस्टम विशेषता को ऑब्जेक्ट, क्लास डेवलपर प्रारम्भ करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को प्रदर्शित करता है। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा की जाती है। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है:

 class CustomAttribute : Attribute
 {
  private int paramNumber = 0;
  private string comment = "";
   public CustomAttribute() { }
   public CustomAttribute(int num) { paramNumber = num; }
   public String Comment
  {
      set { comment = value; }
  }
}


वर्ग का नाम विशेषता नाम पर मैप किया गया है। विजुअल सी कंपाइलर स्वचालित रूप से किसी भी विशेषता नाम के अंत में स्ट्रिंग Attribute जोड़ता है । परिणाम स्वरुप, प्रत्येक विशेषता वर्ग का नाम इस स्ट्रिंग के साथ समाप्त होना चाहिए, Attribute-प्रत्यय के बिना विशेषता को परिभाषित करना विधि है। किसी आइटम के लिए विशेषता को परिभाषित करते समय, कंपाइलर शाब्दिक नाम और अंत में जोड़े गए विशेषता वाले नाम दोनों का अनुसंधान करेगा। Attribute अंत में जोड़ा गया। यदि आप [Custom] लिखना चाहते हैं तो संकलक Custom और CustomAttribute दोनों का अनुसंधान करेगा।यदि दोनों उपस्तिथ हैं, तो संकलक विफल हो जाता है। यदि आप अस्पष्टता का संकट नहीं उठाना चाहते हैं, तो विशेषता को @ के साथ उपसर्ग किया जा सकता है, इसलिए [@Custom] लिखना CustomAttribute से युग्मित नहीं होगा। विशेषता का उपयोग क्लास के निर्माता को आमंत्रित करता है। ओवरलोडेड कंस्ट्रक्टर समर्थित हैं। नाम-मूल्य जोड़े गुणों के लिए मैप किए जाते हैं, नाम संपत्ति के नाम को दर्शाता है और आपूर्ति मूल्य संपत्ति द्वारा निर्धारित किया जाता है।

कभी-कभी इस बात को लेकर अस्पष्टता होती है कि आप किस विशेषता को जोड़ रहे हैं। निम्नलिखित कोड पर विचार करें:

   [Orange]
  public int ExampleMethod(string input)
{
 //method body goes here
}


नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है ExampleMethod है, इसका रिटर्न वैल्यू, या संभवतः पूर्ण असेंबली है? इस विषय में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से युग्मित के रूप में माना जाएगा। यह उद्देश्य नहीं है, कि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लेखन [return: Orange] रिटर्न मान को नारंगी के रूप में चिह्नित करेगा, [assembly: Orange] पूर्ण असेंबली को चिह्नित करेगा। वैध लक्ष्य assembly, field, event, method, module, param, property, return और type हैं।

छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं के जैसे ही किया जाता है किन्तु उनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के निकट विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस प्रकार की विशेषताओं के साथ चिह्नित कोड को भिन्न विधि से संभालता है। जैसे गुण Serializable और Obsolete छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। ILAsm द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।[clarification needed]



मेटाडेटा स्टोरेज

असेंबली में मेटाडेटा की सारणी होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा सारणी में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-अंश मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा सारणी की पहचान करते हैं, और शेष 24 बिट सारणी में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क सॉफ़्टवेयर विकास किट में मॉडल होता है जिसे metainfo कहा जाता है जो असेंबली में मेटाडेटा सारणी को सूचीबद्ध करेगा, चूँकि, यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क एसडीके द्वारा प्रदान किए गए I आईएलडीएएसएम उपकरण का उपयोग करके देखा जा सकता है।

सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली भाषा) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और पोर्टेबल निष्पादन योग्य (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है।

प्रतिबिंब

प्रतिबिंब सीएलआई मेटाडेटा को पढ़ने के लिए उपयोग किया जाने वाला अप्लिकेशन प्रोग्रामिंग अंतरफलक है। प्रतिबिंब एपीआई मेटाइन्फो जैसे उपकरणों द्वारा प्रदान किए गए शाब्दिक दृश्य के अतिरिक्त मेटाडेटा का तार्किक दृश्य प्रदान करता है। .NET फ्रेमवर्क के संस्करण 1.1 में प्रतिबिंब का उपयोग क्लासओं और उनके सदस्यों के विवरण का निरीक्षण करने और विधियों को प्रारम्भ करने के लिए किया जा सकता है। चूँकि, यह किसी विधि के लिए सीएलआई तक रनटाइम पहुँच की अनुमति नहीं देता है। प्रारूप का संस्करण 2.0 सीआईएल को विधि प्राप्त करने की अनुमति देता है।

अन्य मेटाडेटा उपकरण

इसके अतिरिक्त System.Reflection नेमस्पेस, अन्य उपकरण भी उपलब्ध हैं जिनका उपयोग मेटाडेटा को संभालने के लिए किया जा सकता है। माइक्रोसॉफ्ट .नेट (Microsoft .NET) फ्रेमवर्क सीएलआर मेटाडेटा का आदान-प्रदान करके लाइब्रेरी को शिप करता है जिसे नेटिव कोड में प्रारम्भ किया गया है। मेटाडेटा को पुनः प्राप्त करने और आदान-प्रदान करने के लिए तृतीय-पक्ष उपकरण में पोस्टशर्प और मोनो सेसिल का भी उपयोग किया जा सकता है।

यह भी देखें

संदर्भ

  1. "Windows Metadata (WinMD) files". Windows UWP applications (in English).