Impossible de convertir implicitement le Système.IDisposable lors de l'utilisation de “l'Aide”

Donné deux interfaces comme celles-ci:

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

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

... et une mise en œuvre de la classe comme ceci:

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!"); }
}

... Je suppose que l'extrait de code suivant devrait compiler:

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

... au lieu de cela, je reçois toujours le message d'erreur suivant:

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

Une idée? Merci.

  • Êtes-vous sûr que vous avez entré tout correctement? Vous avez MyInterface1 et MyInterface2 en haut, mais IMyInterface1 et IMyInterface2 plus tard.
  • s'il vous plaît poster précis de code seulement. Vérifier avant de poster.
  • Comme écrit ci-dessus, nous avons d'autres erreurs de compilation, pas celui que vous décrivez. Cependant, la façon dont vous avez écrit les types ci-dessus, chacun des types d'interface (en soi) est implicitement convertible IDisposable.
  • Est vous le problème réel, que le type de classe peuvent être convertis à IDisposable de deux façons distinctes, grâce à différentes interfaces mises en œuvre?
  • Non, MyClass n'implémente qu'une seule fois. Les 2 branches sont pliées, ce que le C++ appelle l'héritage virtuel.
  • Oui, j'avais tort. La seule fois qu'il question de "re-mettre en œuvre" une interface, c'est quand vous avez une base de class, qui fournit déjà un (explicite) de la mise en œuvre de l'interface. Cette situation est totalement sans rapport avec le libellé de la question tel qu'il est.

InformationsquelleAutor j3d | 2013-08-17