Wie ist es möglich, dass die abstrakte Klasse System.ServiceModel.ClientBase IDisposable Interface implementiert, wenn die Dispose () - Methodendeklaration nicht sichtbar / deklariert ist?
Wenn ich das gleiche versuche, erhalte ich einen Fehler und kann
nicht kompilieren %Vor%'ATeste' implementiert kein Interface-Member 'System.IDisposable.Dispose ()'
Ich verwende VS 2010 und Framework 4.0.
Überprüfen Sie die ClientBase-Deklaration:
%Vor%Ich habe es erneut getestet, aber dieses Mal habe ich IDisposable implementiert. Jetzt macht es Sinn
%Vor%Ich kann jetzt nicht auf die Dispose () -Methode zugreifen, wenn ich die Testklasse instanziiere:
%Vor%Verwendung der expliziten Schnittstellenimplementierung .
IDisposable
ist sichtbar und kann als
Wie so ziemlich alle darauf hingewiesen haben, ist die Interface-Methode explizit implementiert. Der Quellcode, den Sie für ClientBase<TChannel>
sehen, ist from Metadata
(siehe Metadaten als Quelle in Visual Studio). Beachten Sie die fehlende Implementierung für eine Funktion oder ein partial
Schlüsselwort.
Visual Studio zeigt nicht explizit implementierte Schnittstellenmitglieder from Metadata
(siehe Stacküberlauffrage 72686320 )
Bearbeiten:
Eine explizit implementierte Interface-Methode muss direkt von der Schnittstelle aufgerufen werden (unterscheidet sich damit von einer, die implizit implementiert wurde). Der richtige Weg, um es aufzurufen, ist wie folgt
%Vor% Das Ergebnis ist Unhandled Exception: System.NotImplementedException: The requested feature is not implemented.
ClientBase<TChannel>
implementiert IDisposable
mit expliziter Schnittstellenimplementierung .
Die Implementierung dafür ruft nur close:
%Vor%Tags und Links wcf .net c# c#-4.0 idisposable