Ich benutze eine API API dll, Bloomberg SAPI von Drittanbietern für diejenigen, die darauf zugreifen können.Wie kann eine Entsorgungsmethode verborgen werden?
Hier ist mein Problem:
[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)
Alle der oben genannten ist von der F12/Gehe zu Definition/Objekt-Browser in VS2010. Nun, wenn ich versuche, und verwenden Sie diesen Code:
(new Session()).Dispose();
Dies gilt nicht kompilieren ... Standard-Compiler-Fehler - keine Definition/Extension-Methode ‚Entsorgen‘ gefunden werden.
Wie ist das möglich ??? Sie haben eine Assembly erstellt und ihre Metadaten explizit bearbeitet?
Ich weiß nicht, ob es rechtlich möglich ist (Ausschluss) eine öffentliche Methode zu verstecken ....
Aaarrgggh! nett. Ich hatte nie die expliziten Implementierungen verwendet und wusste daher nicht, dass Sie eine Schnittstelle benötigen, um sie zu verwenden. Vielen Dank ! – Vivek
Explizite Schnittstellenimplementierung ist in der Regel nicht notwendig, aber manchmal ist es auch schön, wenn Sie zum Beispiel Ihre Mitentwickler dazu zwingen wollen, nach Schnittstellen statt nach Implementierung zu programmieren. Und manchmal, wenn es notwendig ist, wie wenn Sie zwei verschiedene Schnittstellen implementieren müssen, die eine identische Mitgliedssignatur haben, müssen Sie zwei verschiedene Arten implementieren. –
Yup. Vielen Dank. Wie Sie bereits erwähnt haben, müssen Sie die expliziten Ausdrücke nur selten verwenden, wenn die Methodennamen kollidieren. Dies ist das erste Mal, dass ich dies im Produktionscode sah. Wundern Sie sich, was mit DISPOSE kollidierte! :) – Vivek