Nicht in der Lage zu konvertieren implizit in System.IDisposable, wenn Sie mit "Mit"

Gegeben, zwei-Schnittstellen wie diese:

public interface MyInterface1 : IDisposable
{
    void DoSomething();
}

public interface MyInterface2 : IDisposable
{
    void DoSomethingElse();
}

... und eine Klasse Umsetzung, wie diese:

public class MyClass : IMyInterface1, IMyInterface2
{
    public void DoSomething()     { Console.WriteLine("I'm doing something..."); }
    public void DoSomethingElse() { Console.WriteLine("I'm doing something else..."); }
    public void Dispose()         { Console.WriteLine("Bye bye!"); }
}

... Ich würde davon ausgehen, das folgende code-snippet sollte kompilieren:

class Program
{
     public static void Main(string[] args)
     {
          using (MyInterface1 myInterface = new MyClass()) {
              myInterface.DoSomething();
          }
     }
}

... stattdessen bekomme ich immer die folgende Fehlermeldung:

Error  1  'IMyInterface1': type used in a using statement must be implicitly convertible to 'System.IDisposable'

Irgendeine Idee? Danke.

  • Sind Sie sicher, Sie haben alles richtig eingegeben? Sie haben MyInterface1 und MyInterface2 an der Spitze, aber IMyInterface1 und IMyInterface2 später auf.
  • poste bitte genaue code nur. Überprüfen Sie vor der Veröffentlichung.
  • Wie oben geschrieben, bekommen wir andere Zusammenstellung von Fehlern, nicht die, die Sie beschreiben. Jedoch, die Art, wie Sie schrieb den Typen vor, die jeweils das interface-Typen (in sich selbst) ist implizit konvertierbar IDisposable.
  • Ist Sie wirkliche problem ist, dass die Klasse-Typ konvertiert werden kann IDisposable auf zwei verschiedene Arten, durch verschiedene Schnittstellen implementiert?
  • Nein, MyClass implementiert nur einmal. Die 2 äste sind gefaltet, was C++ ruft der virtuellen Vererbung.
  • Ja, ich war falsch. Das einzige mal, es könnte eine Rolle spielen, zu "re-Implementierung" eine Schnittstelle ist, wenn Sie einen base - Klasse, die bereits versorgt eine (explizite) Implementierung der Schnittstelle. Diese situation ist völlig unabhängig von der tatsächlichen Frage, wie es steht.

InformationsquelleAutor j3d | 2013-08-17
Schreibe einen Kommentar