एक विधि DeclarationSyntax ऑब्जेक्ट को देखते हुए मैं विधि के घोषित प्रकार को कैसे ढूंढ सकता हूं?एक विधि का घोषित करने वाला प्रकार ढूंढना
मेरी वास्तविक समस्या यह है कि मुझे यह पता लगाने की आवश्यकता है कि संदर्भित विधि एक इंटरफ़ेस विधि लागू कर रही है या नहीं।
उदाहरण के लिए, अगर मैं निपटान() विधि के लिए एक MethodDeclarationSyntax है, कोड bellow दिया, कैसे निष्कर्ष निकाल सकते हैं यह IDisposable.Dispose के कार्यान्वयन है()?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
मैं विधि के घोषित प्रकार मिलता है (और प्रकार की जांच) कोई सफलता के साथ करने के लिए कोशिश की है (पैरेंट संपत्ति मुझे InterfaceImplementation वर्ग वापस देता है)।
मैं भी विधि के लिए अर्थ प्रतीक हड़पने की कोशिश की है:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
लेकिन कुछ भी है कि मुझे मदद कर सकता है स्पॉट नहीं कर सका।
विचार?
मैं 'बराबर()' के बजाय '==' ऑपरेटर का उपयोग करूंगा, क्योंकि 'FindImplementationForInterfaceMember() '' null' वापस कर सकता है। या कम से कम 'बराबर() 'को दूसरी तरफ लिखें। – svick
@svick: समान आदेशों को स्वैप करने पर अच्छा बिंदु। बराबर का मेरा उपयोग दुर्घटना से नहीं है, क्योंकि हमने रोज़लिन टीम पर एक महत्वपूर्ण आदत विकसित की है: == का उपयोग तब तक ठीक काम करेगा जब तक आप केवल भाषा-विशिष्ट प्रकारों का उपयोग नहीं कर रहे हों। यदि आपके पास दो IMethodSymbols थे, तो आपको * उस मामले में == को अधिभारित नहीं किया जाना चाहिए। –
@Jason मुझे डर है कि यह मेरी मदद नहीं करेगा क्योंकि इसमें मान लिया गया है मुझे पता है कि तरीकों मैं के खिलाफ जांच करने की आवश्यकता है जो ऐसा नहीं है (अपने कोड में, आप एक संदर्भ() विधि प्रतीक फेंक और उस के खिलाफ तुलना करने के लिए हड़पने) कर रहा हूँ। निस्संदेह मैं बेस क्लास/इंटरफेस को बार-बार देख सकता हूं (जब तक मैं ऑब्जेक्ट तक नहीं पहुंच जाता) लेकिन मैं उम्मीद करूंगा कि MethodSymbol क्लास मुझे यह जानकारी सीधे प्रदान कर सकता है। – Vagaus