C#.Net 4.5,带有动态参数的方法缺少接口定义

C#.Net 4.5,带有动态参数的方法缺少接口定义,c#,dynamic,.net-4.5,missingmethodexception,C#,Dynamic,.net 4.5,Missingmethodexception,这个应用程序编译得很好。 但是,当x的类型被声明为动态(而不仅仅是使用var)时,会引发运行时绑定异常 同样,在主方法中,如果我用InterfaceA替换InterfaceB,代码将无误地执行。 即InterfaceA InterfaceA=B类 为什么会出现这种情况?因为当接口(B)扩展接口(A)时,接口(B)仍然不拥有“InterfaceAMethod”,所以classB只实现InterfaceA的方法InterfaceAMethod using System; namespace Dyn

这个应用程序编译得很好。 但是,当x的类型被声明为动态(而不仅仅是使用var)时,会引发运行时绑定异常

同样,在主方法中,如果我用InterfaceA替换InterfaceB,代码将无误地执行。 即InterfaceA InterfaceA=B类

为什么会出现这种情况?

因为当接口(B)扩展接口(A)时,接口(B)仍然不拥有“InterfaceAMethod”,所以classB只实现InterfaceA的方法InterfaceAMethod

using System;

namespace DynamicIssues
{
    public interface InterfaceA
    {
        void InterfaceAMethod(dynamic x);
    }

    public interface InterfaceB : InterfaceA
    {

    }

    public abstract class ClassA : InterfaceA
    {
        public virtual void InterfaceAMethod(dynamic x)
        {
            Console.WriteLine("A: " + x.ToString());
        }
    }

    public class ClassB : ClassA, InterfaceB
    {
        public override void InterfaceAMethod(dynamic x)
        {
            Console.WriteLine("B: " + x.ToString());
        }
    }

    public class ToStringer
    {
        public string Value = "StringVal";

        public override string ToString()
        {
            return Value;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ClassB classB = new ClassB();
            InterfaceB interfaceB = classB;

            dynamic x = new ToStringer();   //Using "var", application works fine.

            classB.InterfaceAMethod(x);     //"B: StringVal" is printed, as expected
            interfaceB.InterfaceAMethod(x); //Throws runtime binder exception with message "'DynamicIssues.InterfaceB' does not contain a definition for 'InterfaceAMethod'."
        }
    }
}