2010-05-14 14 views
6

मेरे पास एक वर्ग है जिसमें विधियों का एक समूह है।मैं उन सभी विधियों को कॉल करने के लिए प्रतिबिंब का उपयोग कैसे करूं जिनमें एक निश्चित कस्टम विशेषता है?

इनमें से कुछ विधियों को कस्टम विशेषता द्वारा चिह्नित किया गया है।

मैं इन सभी विधियों को एक बार में कॉल करना चाहता हूं।

मैं उस श्रेणी में सभी विधियों की सूची खोजने के लिए प्रतिबिंब का उपयोग करने के बारे में कैसे जाउंगा जिसमें यह विशेषता है?

उत्तर

7

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

var methods = typeof(MyClass).GetMethods(BindingFlags.Public); 

foreach(var method in methods) 
{ 
    var attributes = method.GetCustomAttributes(typeof(MyAttribute), true); 
    if (attributes != null && attributes.Length > 0) 
     //method has attribute. 

} 
6

सबसे पहले, आप उस प्रकार पर परिभाषित सभी विधियों की एक सरणी प्राप्त करने के लिए typeof(MyClass).GetMethods() पर कॉल करेंगे, फिर आप निर्दिष्ट विधियों के कस्टम विशेषताओं की एक सरणी प्राप्त करने के लिए methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), true) पर लौटने के प्रत्येक तरीके से लूप करें और कॉल करें। यदि सरणी शून्य-लंबाई है तो आपकी विशेषता विधि पर नहीं है। यदि यह शून्य है, तो आपकी विशेषता उस विधि पर है और आप इसे कॉल करने के लिए MethodInfo.Invoke() का उपयोग कर सकते हैं।

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

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