2012-02-29 19 views
6

में विधियों को कैसे प्राप्त करें: सिस्टम। टाइप उदाहरण। विरासत में मिला नहीं - - ओवरराइड नहींकिसी प्रकार

मैं नेट प्रतिबिंब का उपयोग करना चाहते हैं और

उद्देश्य नव शुरू की विधियों (मैं सही शब्द पता नहीं है) प्राप्त करने के लिए प्रकार है, जो हैं में है मैंने Type.GetMethods() विधि की कोशिश की। लेकिन, यह विरासत में और वंचित लोगों को भी लौटा दिया।

मैंने सभी विधियों को प्राप्त करने के बाद फ़िल्टरिंग के बारे में सोचा। और मैंने MethodInfo कक्षा द्वारा प्रकट गुणों/विधियों को देखा। मैं समझ नहीं पाया कि मैं क्या चाहता था।

उदाहरण के लिए: मैं एक वर्ग है, class A { void Foo() { } }

जब मैं आह्वान typeof(A).GetMethods(), मैं System.Object में तरीकों के साथ-साथ Foo मिलती है: Equals, ToString, GetType और GetHashCode। मैं इसे केवल Foo पर फ़िल्टर करना चाहता हूं।

किसी को भी ऐसा करने के तरीके पता है?

धन्यवाद।

+1

विरासत और ओवरराइड विधियां इस प्रकार से संबंधित हैं। आप उन्हें क्यों सूचीबद्ध नहीं होने की उम्मीद करेंगे? क्या आप कृपया समझा सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं? – asawyer

+0

मैं एक रिपोर्ट उत्पन्न करने की कोशिश कर रहा हूं जिसमें कहा गया है कि इन विधियों को पुस्तकालय/उत्पाद में नया जोड़ा गया है। और मैं व्यवसाय की आवश्यकता के कारण विरासत/ओवरराइड विधियों को सूचीबद्ध नहीं करना चाहता हूं। उन्हें अपने परिभाषित प्रकार के हिस्से के रूप में रिपोर्ट किया जाना है। – pnvn

उत्तर

8

GetMethods में एक अधिभार है जो आपको BindingFlags निर्दिष्ट करने देता है। जैसे इसलिए यदि आपको सभी घोषित, सार्वजनिक, उदाहरण विधियों को प्राप्त करने की आवश्यकता है, तो आपको संबंधित झंडे को पारित करने की आवश्यकता है।

var declaredPublicInstanceMethods = 
    typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); 
+0

धन्यवाद। यह ज्यादातर भाग के लिए काम किया। ओवरराइड विधियां अभी भी दिखाई देती हैं। – pnvn

+1

ठीक है, अगर ए एक विधि को ओवरराइड करता है कि विधि प्रकार की घोषणाओं का हिस्सा है तो ऐसा क्यों नहीं होगा? –

0

आप कर सकते हैं DeclaringType द्वारा दिया MethodInfo संग्रह फिल्टर करें:

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A)); 
2

मुझे आशा है कि आप यही चाहते था

var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly); 
+0

काम नहीं किया। किसी कारण से, घोषित केवल अकेला ध्वज पर्याप्त नहीं है। फिर भी धन्यवाद। – pnvn

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