31 votes

La dynamique C # échoue en invoquant une méthode à partir d'une interface de base

Prenez le code suivant:

ICanQuack quack = new Duck();
var map = (object) "a map";
quack.Fly((dynamic)map);

l'utilisation de ces types de

public interface ICanFly
{
    void Fly<T>(T map);
}

public interface ICanQuack : ICanFly
{
    void Quack();
}

public class Duck : ICanQuack
{
    public void Fly<T>(T map)
    {
        Console.WriteLine("Flying using a {0} map ({1})", typeof (T).Name, map);
    }

    public void Quack()
    {
        Console.WriteLine("Quack Quack!");
    }
}

Compilé avec C# 5 compilateur contre .NET 4.5.1 (le comportement est probablement la même chose avec l'ancienne compilateur/framework version) cela génère l'erreur suivante: enter image description here

Maintenant, j'ai une assez bonne idée de ce qui se passe sous les couvertures (j'ai blogué à ce sujet ici) mais je ne peux pas venir avec une réponse satisfaisante pourquoi?

13voto

kyle Points 2893

Je suppose que cette situation a déjà été signalée à Microsoft.

Regardez ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X