होने:
class DisposableObject : IDisposable
{
public void Dispose()
{
//...
}
}
आप कर सकते हैं:
Type t = typeof(DisposableObject);
InterfaceMapping m = t.GetInterfaceMap(typeof(IDisposable));
MethodInfo mi = t.GetMethod("Dispose");
Console.WriteLine(mi == m.TargetMethods[0]); //true
तो, मुझे लगता है कि आप अपनी कक्षा में कुछ Dispose
विधि के लिए MethodInfo
है (यहाँ mi
, बस GetMethod(string)
के माध्यम से)। तो Type.GetInterfaceMap Method के माध्यम से आपको घोषित प्रकार (DisposableObject
) में IDisposable
कार्यान्वयन के लिए InterfaceMapping Structure ऑब्जेक्ट प्राप्त करने की आवश्यकता होगी। वास्तव में इंटरफेस को लागू करने वाले तरीकों का संदर्भ देने के लिए आपके पास TargetMethods
है। इसलिए, हमें केवल यह जांचने की आवश्यकता है कि आपका संदर्भ m.TargetMethods[0]
के बराबर है IDisposable
केवल एक विधि घोषित करता है।
MSDN से:
InterfaceMapping संरचना
एक वर्ग कि है कि इंटरफ़ेस को लागू करता है पर वास्तविक तरीकों में एक इंटरफेस की मैपिंग पुन: प्राप्त करता।
जब एक प्रकार लागू करता है इंटरफ़ेस तरीकों कि इंटरफ़ेस द्वारा निर्दिष्ट के अलावा अन्य विधि के नाम का इस्तेमाल InterfaceMapping संरचना का प्रयोग करें, या एक प्रकार है जो एक ही नाम के साथ एक विधि है कई इंटरफेस को लागू करता है जब।
इंटरफ़ेस मैपिंग संरचना प्राप्त करने के लिए, Type.GetInterfaceMap विधि का उपयोग करें।
एक टिप्पणी: यदि आपका वर्ग IDisposable
स्पष्ट रूप से लागू कर सकता है, तो m.TargetMethods[0]
स्पष्ट implemetation संदर्भ होगा। इसलिए, मुझे यकीन नहीं है कि InterfaceMapping
को छोड़कर Use Reflection to find Methods that implement explicit interfaces को छोड़कर कोई भी तरीका है या नहीं। यह स्थिति त्रुटि प्रवण हो सकती है। इसे अपने विशिष्ट मुद्दे के लिए जांचें।
यदि कोई वर्ग 'आईडीस्पोजेबल' लागू करता है, तो आपको गारंटी है कि यह 'निपटान' लागू करता है - यह इंटरफ़ेस का बिंदु है। – Blorgbeard
मैं इसे समझता हूं। मुझे पता है कि 'निपटान' मौजूद है, लेकिन मैं एक पोस्टशर्प पहलू का उपयोग कर रहा हूं जिसे एक अलग फ़ंक्शन की तुलना में 'निपटान' कहा जाता है जब विशेष कार्यक्षमता निष्पादित करनी चाहिए। PostSharp पहलू 'System.Reflection.MethodInfo' में विधि हस्ताक्षर लौटाता है। –