एट्रिब्यूट्स - डिक्लेरेटिव मेटाडेटा
एट्रिब्यूट एक डिक्लेरेटिव टैग है जो रनटाइम को क्लासेस, मेथड्स, स्ट्रक्चर्स, एन्यूमरेटर्स, असेंबलीज़ आदि के व्यवहार के बारे में जानकारी देता है। आप एट्रिब्यूट का उपयोग करके प्रोग्राम में डिक्लेरेटिव जानकारी जोड़ सकते हैं। एक डिक्लेरेटिव टैग को स्क्वायर ब्रैकेट्स [ ] द्वारा दर्शाया जाता है जो उस एलिमेंट के ऊपर रखा जाता है जिसके लिए इसका उपयोग किया जाता है।
एट्रिब्यूट सिंटैक्स:
[attribute(positional_parameters, name_parameter = value, ...)] Element
.NET फ्रेमवर्क दो प्रकार के एट्रिब्यूट्स प्रदान करता है:
- प्री-डिफाइन्ड एट्रिब्यूट्स: फ्रेमवर्क में बिल्ट-इन (
Obsolete,Serializable,Conditional, आदि) - कस्टम एट्रिब्यूट्स: यूज़र-डिफाइन्ड
कस्टम एट्रिब्यूट घोषित करना:
// BugFix कस्टम एट्रिब्यूट - क्लास और इसके मेंबर्स को असाइन करने के लिए
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]
public class DeBugInfo : System.Attribute {
public int BugNo { get; set; }
public string Developer { get; set; }
public string LastReview { get; set; }
public string Message { get; set; }
}
एट्रिब्यूट लागू करना:
[DeBugInfo(BugNo = 123, Developer = "John", Message = "Fixed null ref")]
public class MyClass {
[DeBugInfo(456, "Jane", "Optimized")]
public void MyMethod() { }
}
रनटाइम पर एट्रिब्यूट पढ़ना (रिफ्लेक्शन):
var attrs = typeof(MyClass).GetCustomAttributes(); foreach (var attr in attrs) { Console.WriteLine($"Bug: {attr.BugNo}, Dev: {attr.Developer}"); }
आम प्री-डिफाइन्ड एट्रिब्यूट्स:
| एट्रिब्यूट | उपयोग |
|---|---|
| [Obsolete("message")] | पुराने कोड को चेतावनी/एरर के साथ मार्क करें |
| [Serializable] | सीरियलाइज़ेशन सक्षम करें |
| [Conditional("DEBUG")] | केवल DEBUG बिल्ड में कंपाइल |
| [AttributeUsage] | कस्टम एट्रिब्यूट के टार्गेट्स परिभाषित करें |
| [DllImport] | अनमैनेज्ड DLL फंक्शन इम्पोर्ट करें |