c# - 为什么在传递动态对象的接口类型上调用继承方法时会引发 RuntimeBinderException?
问题描述
您能否解释一下此代码的行为:
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' 参数] 在 System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite站点,T0 arg0,T1 arg1) 在 DynamicTesting.Program.Main(String[] args):第 30 行
如果我使用int
而不是dynamic
那么它工作正常。我不明白为什么它不起作用。你有什么想法?
解决方案
推荐阅读
- javascript - 我如何检查变量是否是JS中的特定数字
- bash - 如何在剪切shell命令中传递字符串变量
- c++ - 如何直接写入向量数组
我正在尝试直接写入
auto tablelisttt = std::make_shared<std::vector< std::array<std::string, 9>>(size);
for (int j = 1; j <=max; j++) {
- .net-core - 用 .NET 5.0 编写的控制台应用程序无法在同事的计算机上运行
- python - 努力从Python中的csv文件中提取列数据
- postgresql - 如何使用 jpa 标准检查 postgresql jsonb 列中存在的元素?
- excel - 隐藏范围内除单元格值外的所有列
- python - 为什么 elif 在我的 Python 示例中不起作用?
- java - 尝试使用 CameraX 和 MLKit 构建条形码扫描仪,但在 BarcodeScanning.getClient() 出现“MlKitContext 尚未初始化”异常
- powershell - 进行比较时,Powershell 脚本已经运行了好几天