【问题标题】:C# dynamic fails invoking method from a base interfaceC# 动态从基接口调用方法失败
【发布时间】:2013-11-27 21:39:39
【问题描述】:

取以下代码:

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

使用这些类型

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

使用针对 .NET 4.5.1 的 C# 5 编译器编译(使用较旧的编译器/框架版本的行为可能相同),这会产生以下错误:

现在,我有一个很好的想法 什么 在幕后发生(我在博客上写了 here),但我无法给出令人满意的答案 为什么强>?

【问题讨论】:

  • 我怀疑答案可能是“错误”:) 但我稍后会更详细地查看。
  • 有趣的问题!我猜dynamic 不能用作泛型的类型参数,因为它不是实际类型。
  • @Aschratt 这是一个嵌套接口问题。看看他的博客。
  • 根据 Kyles 的回答,您的问题可能与 stackoverflow.com/questions/3696047/… 重复
  • 我同意格伦;根据该错误消息,dynamic 似乎不知道基本接口。不确定这是否适用于所有情况(因为我极少使用dynamic)。

标签: c# dynamic


【解决方案1】:

我猜这种情况已经报告给微软了。

看看here

【讨论】:

  • 是的,看起来是这样。我猜这个修复也没有进入 .NET 4.5.1 和 2013 编译器。
猜你喜欢
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2012-04-07
  • 2020-04-11
  • 2016-05-29
相关资源
最近更新 更多