2013-08-02 7 views
5

मैं उन लोगों के लिए एक थर्ड पार्टी एपीआई डीएलएल, ब्लूमबर्ग एसएपीआई का उपयोग कर रहा हूं जो इसे जानते हैं/इसका उपयोग करते हैं। उपरोक्त सभीएक निपटान विधि कैसे छुपाया जा सकता है?

[ComVisible(true)] 
public interface IDisposable  
{ //this is from mscorlib 2.0.0.0 - standard System.IDisposable 
    void Dispose(); 
} 

public abstract class AbstractSession : IDisposable {}//method signatures and comments 

public class Session : AbstractSession {} //method signatures and comments (from assembly metadata) 

है से F12/VS2010 में परिभाषा/वस्तु ब्राउज़र पर जाएँ:

यहाँ मेरी समस्या है। अब जब मैं कोशिश करते हैं और इस कोड का उपयोग:

(new Session()).Dispose(); 

यह संकलन नहीं करता है ... मानक संकलक त्रुटि - कोई परिभाषा/विस्तार विधि 'फेंक' पाया जा सकता है।

यह कैसे संभव है ??? उन्होंने एक असेंबली बनाई है और स्पष्ट रूप से इसे मेटाडेटा संपादित किया है?

मैं अगर यह (बहिष्कार करने के लिए) को छिपाने के लिए एक सार्वजनिक विधि कानूनी तौर पर संभव है पता नहीं है ....

उत्तर

16

यह explicit interface implementation कहा जाता है। वर्ग की तरह लिखा है:

class Session : IDisposable { 
    void IDisposable.Dispose() { 
     // whatever 
    } 
} 

अगर आपके चर की तरह, प्रकार IDisposable की है आप केवल यह कॉल कर सकते हैं:

IDisposable mySession = new Session(); 
mySession.Dispose(); 

या कास्टिंग द्वारा:

((IDisposable)mySession).Dispose(); 

या एक using साथ कथन, जो स्वचालित रूप से Dispose को पूर्ण होने पर कॉल करता है (यह केवल IDisposable पर विशिष्ट है, और आम तौर पर इसे निपटाने के लिए सबसे अच्छा अभ्यास है वाई ऑब्जेक्ट जो इस इंटरफ़ेस को लागू करता है):

using (var session = new Session()) { } 
+0

आरागघ! अच्छा। मैंने कभी भी स्पष्ट कार्यान्वयन का उपयोग नहीं किया था, इसलिए यह नहीं पता था कि इसका उपयोग करने के लिए आपको एक इंटरफ़ेस कास्ट चाहिए। धन्यवाद ! – Vivek

+0

स्पष्ट इंटरफ़ेस कार्यान्वयन आमतौर पर आवश्यक नहीं है, लेकिन कुछ बार ऐसा अच्छा होता है, जैसे कि जब आप अपने साथी डेवलपर्स को कार्यान्वयन के बजाय इंटरफ़ेस द्वारा कोड करने के लिए मजबूर करना चाहते हैं। और कुछ बार जब आवश्यक हो, जैसे कि आपको दो अलग-अलग इंटरफेस को लागू करने की आवश्यकता होती है, जिसमें एक समान सदस्य हस्ताक्षर होता है जिसे आपको दो अलग-अलग तरीकों से लागू करने की आवश्यकता होती है। –

+0

यूप। धन्यवाद। जैसा कि आपने उल्लेख किया है, आपको शायद स्पष्ट रूप से स्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है जब तक कि विधि नाम संघर्ष नहीं कर रहे हैं, इसलिए यह पहली बार है जब मैंने इसे उत्पादन कोड में देखा था। आश्चर्य कीजिए कि डिस्पोज़ के साथ क्या हुआ! :) – Vivek

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