能否请您解释一下此代码的行为:
namespace DynamicTesting
{
public interface IDynamicTargetBase
{
string Hello(int a);
}
public interface IDynamicTarget : IDynamicTargetBase
{
}
public class DynamicTarget : IDynamicTarget
{
public string Hello(int a)
{
return "Hello!";
}
}
public class Program
{
public static void Main(string[] args)
{
dynamic a = 123;
IDynamicTargetBase obj1 = new DynamicTarget();
obj1.Hello(a); // This works just fine
IDynamicTarget obj2 = new DynamicTarget();
obj2.Hello(a); // RuntimeBinderException "No overload for method 'Hello' takes '1' arguments"
}
}
}
结果是:
[Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:方法'Hello'的重载不带有'1'参数] 在CallSite.Target(Closure,CallSite,IDynamicTarget,Object) 在System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2 [T0,T1](CallSite站点,T0 arg0,T1 arg1) 在DynamicTesting.Program.Main(String [] args)处:第30行
如果我使用int
而不是dynamic
,那么它工作正常。
我不明白为什么它不起作用。你有什么想法吗?