如何动态调用动态对象的方法?

2024-05-02

当我想在 C# 中的任何对象上动态调用静态定义的(“静态”是指“在编译时确定”的意义上,而不是“类级成员”的意义上)方法时,我可以使用反射获取该方法的句柄并调用它:

typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });

然而,对象通过继承而变得动态DynamicObject使用响应(未定义)实例方法调用TryInvokeMember,并且由于显而易见的原因,类响应的动态方法不会通过反射公开。这意味着我无法获取应通过以下方式响应的方法的方法句柄TryInvokeMember.

具有讽刺意味的是,在我看来,你不能动态地调用动态方法dynamic对象就像在非对象上调用定义的方法一样容易dynamic object.

我考虑过打电话TryInvokeMember直接,但第一个参数必须是一个实例InvokeMemberBinder,一个抽象类。我觉得如果我必须实现一个类来调用动态对象上的动态方法,我一定做错了什么。

我怎样才能调用一个方法dynamic通过名称来了解对象,知道目标类确实not实施它并且应该使用它来响应TryInvokeMember?


我有一个开源(Apache 许可证)框架 Dynamitey(在 nuget 中提供),它封装了动态绑定器代码,其中包括自动缓存调用站点。它也为每种类型的绑定器提供了方便的方法(getter、setter、事件、索引器、运算符、转换),但是您特别想要调用成员 https://github.com/ekonbenefits/dynamitey/wiki/UsageReallyLateBinding#dynamic-dynamicinvokegetobject-target-string_or_invokemembername-name.

当调用类的静态定义(在编译时)成员时,动态绑定器代码实际上比反射(摊销)运行得更快。

Dynamic.InvokeMember(foo,"Bar",arg...);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何动态调用动态对象的方法? 的相关文章

  • 将 C# 中的 asmx web 服务的 Soap 请求标头从 text/xml 更改为soap/xml

    我需要调用网络服务 我生成了一个代理并调用了该方法 但它一直失败 因为 API 期望标头中包含soap xml 而 Visual Studio 中生成的代理客户端则在标头中发送文本 xml 问题 是否可以更改生成的代理客户端的 Conten
  • 在 SpecFlow 测试中使用 ChromeDriver

    因此 正如我们所知 当您使用 SpecFlow 时 如果您重复使用另一个测试中的步骤 它会自动将其拉入并重复使用 但是 我遇到了一个问题 测试 A 登录我 测试 B 登录并确认主页是正确 但当我开始使用测试 B 时 测试 A 正在初始化 C
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 在 C# 应用程序中使用 LinkedIn API

    我正在构建一个小型 Windows 窗体应用程序 并且想要从公司搜索 API 访问信息 我什至不想在个人资料中写入任何内容 我已经打开一个网络浏览器并要求我的用户在我的应用程序中输入一些验证码 这真是令人难以置信的令人沮丧 有大量针对 Py
  • C# 3维数组

    我想将 3 维数组中的 ARRAY 存储到buildingCostIds 中 但它说我必须有第三个数字 public static int buildingCost 0 1 2 5 5 5 public static void addBui
  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic
  • IIS 上托管的 WCF 服务无法运行

    我想构建一个公开 basicHTTP 端点和 webHTTP 端点的服务 如果我在运行模式下使用 VS2010 测试以下项目 一切都很好 但我想在 IIS 中托管服务 本地或远程 并通过测试 服务 svc 我将我的网站托管到本地 IIS 中
  • 具有主区域的 OpenMP for 循环:“主区域可能不会紧密嵌套在工作共享或显式任务区域内”

    我有以下代码 我相信它应该显示一个进度条 近似整个过程的进度 因为循环的每个并行线程应该以大约相同的速率进行 pragma omp parallel for for long int x 0 x
  • 为我的应用程序需要与之通信的每一台主机使用一个 HttpClient 实例是否可以?

    我知道 当使用 Microsoft 依赖注入容器时 处理 HttpClient 实例的最佳实践是使用IHttpClientFactory接口 https github com aspnet Extensions blob master sr
  • 当我使用并行代码时,为什么我的计算机没有显示加速?

    所以我意识到这个问题听起来很愚蠢 是的 我使用的是双核 但我尝试了两个不同的库 Grand Central Dispatch 和 OpenMP 并且当使用 clock 来对带有和不带有使平行的话 速度是一样的 根据记录 他们都使用自己的并行
  • 是否需要连续编号?

    我正在开发一个 winform NET 应用程序 其中包括订单 发票 服务订单 票务等 这些实体在对其 ID 进行编号时是否必须按顺序排列 国际海事组织没有 以一个订单为例 它只有通过业务层才有效 在此过程中 可能已经创建了另一个订单 批准
  • 什么时候值得使用位域?

    是否值得使用 C 的位域实现 如果有 什么时候使用过 我正在查看一些模拟器代码 看起来芯片的寄存器没有使用位字段来实现 这是出于性能原因 或其他原因 而避免的事情吗 还会有使用位域的时候吗 即安装在实际芯片上的固件等 位字段通常仅在需要将结
  • Google Test 宏似乎不适用于 Lambda 函数

    所以 我有以下代码 无论 Interpolator 类的细节是什么 在这种情况下它都不应该抛出异常 这就是我想要测试的 TEST errorhandlingInterpolator toolargeInput const size t nu
  • 如何按顺序而不是并行等待 C# 任务?

    我有一组异步测试 它们在外部硬件上运行 我可以按顺序运行它们 但因为所有这些测试都有副作用 所以我希望能够重新排列它们并一遍又一遍地运行它们 当我将它们放入列表中并尝试等待每个之后 它们全部并行运行 而不是 1 个 1 个运行 我希望能够打
  • 在 .NET 中加载 ECC 私钥

    我有一个 ECC 私有密钥和一个包含公钥的证书文件 我可以获取 PEM 或 DER 格式的文件 我可以将证书读入X509Certificate用这个代码 var certbytes File ReadAllBytes certificate
  • 使用 WinRT 接受无效的 SSL 证书

    在某些情况下 您希望应用程序接受无效的 SSL 证书 测试环境 自签名证书等 在 NET 世界中 人们会使用ServerCertificateValidationCallback类这样做 不幸的是 该类不存在于 WinRT 上下文中 我需要
  • 无法使用 WMI 和 C# 远程终止进程

    我正在尝试编写一个方法 如果无法使用 StopService 方法停止 该方法将通过进程 ID 终止远程系统上的服务 我尝试了两种不同的方法来调用 ManagementObject 上的 Terminate 方法 但出现两个不同的错误 对我
  • 使用自定义 TTF 字体进行 DrawString 图像渲染

    我在服务器端使用 GDI 创建图像 并将其传输到用户的浏览器 没有一个标准字体符合我的要求 因此我想加载 TrueType 字体并使用此字体将字符串绘制到图形对象 using var backgroundImage new Bitmap b
  • 根据内容将 JSON 动态反序列化为派生类型?

    在我作为一个业余项目编写的小库中 我使用 RestSharp 从 Web API 获取 Json 反序列化为模型类对于简单类型来说效果很好 但在某些端点 结果类型在请求时未知 或不清楚 具体来说 它是 GuildWars2 API v1 一
  • 什么是内在函数?

    谁能解释一下它们是什么以及为什么我需要它们 如果我需要使用内在函数 我要构建什么样的应用程序 内部函数是编译器在可能的情况下直接实现的函数 而不是链接到库提供的函数实现 一个常见的例子是strncpy 对于短字符串 进行函数调用strncp

随机推荐

  • 如何替换 iOS 6 上 UIWebView 键盘下工具栏上的按钮?

    如何替换工具栏上的按钮UIWebViewiOS 6 上有键盘吗 以下代码在 iOS 5 1 上运行良好 但在 iOS 6 上不起作用 UIWindow keyboardWindow nil for UIWindow testWindow i
  • 获取类中的字段数

    有没有办法获取一个类的字段数量 struct Base char a int b struct Derived Base std string c static assert num fields value 2 static assert
  • JavaScript 日期 + 7 天

    这个脚本有什么问题 当我将时钟设置为 29 04 2011 时 它会添加2011年4月36日在星期输入 但正确的日期应该是6 5 2011 var d new Date var curr date d getDate var tomo da
  • 第 n 行到最后一行的总和

    我想在电子表格顶部创建一个 TOTAL 行 在此行中 每个单元格应为 TOTAL 行下方列中的值的总和 例如 如果总行数是第 1 行 则单元格 A1 应该是 A2 到 A 列最后一行的总和 电子表格中的行数会随着时间的推移而增长 所以我不能
  • SpringBoot @SqsListener - 不工作 - 有异常 - TaskRejectedException

    我有一个 AWS SQS 队列中已有 5000 条消息 示例消息类似于 Hello 1 我创建了一个 SpringBoot 应用程序 并在其中一个组件类中创建了一个从 SQS 读取消息的方法 package com example aws
  • 自动完成请求/服务器响应是什么样的?

    这似乎是一个黑洞 经过一个小时的搜索jQuery用户界面 http en wikipedia org wiki JQuery UI网站 Stack Overflow 和谷歌搜索 我还没有找到如何编写的最基本信息服务器端自动完成的 向服务器传
  • 根据 ID 更新 React.js 中的特定组件实例

    在react js应用程序中 我想知道为每个组件提供一个ID的最佳实践是什么 该ID可用于根据需要仅更新该组件的信息 例如 如果我们有一个显示销售信息的组件 并且我们创建并显示其中 20 个组件 因为我们有 20 个产品 那么我们会每隔一段
  • 拆分 MS Access 数据库 - 前端部分位置

    最佳实践之一按照微软的规定 http msdn microsoft com en us library dd942824 aspx odc ac2007 ta PerformanceTipsToSpeedUpYourAccessDB Mul
  • jQuery 的 event.stopPropagation() 导致 Rails 出现问题:remote => true

    我创建了一些自定义 弹出窗口 最初使用 display none 样式 它们通过相邻的 popup trigger 链接进行切换 具有以下汇总功能 public javascripts application js jQuery docum
  • ClientDataset 索引更改时不计算 TAggregateField

    我正在使用连接到 DBGrid 的 TClientDataset 和几个聚合字段 用于计算其他几个浮点字段的总和 所有字段均已在设计时创建 一切都按预期工作 直到 ClientDataset 的 IndexName 使用自定义索引更改 以便
  • Wordpress 主题管理面板显示本地服务器中的致命错误

    我有一个 WordPress 项目 这里我们使用主题jupiter 当我在本地 XAMPP 服务器上设置它时 它的主题选项不起作用 这个问题出在我的电脑上 但在另一台电脑上却正常 My XAMPP是最新版本 它显示的错误 Fatal err
  • 如何在指令中插入 $compile 的 HTML 代码而不出现 $digest 递归错误?

    我有一个指令 根据ng repeat项目数据 来自数据库 使用 switch case 构建自定义 HTML app directive steps function compile return restrict A template h
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 有没有办法“source()”并在错误后继续?

    我有一个大型 R 脚本 其中包含 142 个小部分 如果某一部分因错误而失败 我希望脚本继续而不是停止 这些部分不一定相互依赖 但有些部分确实相互依赖 如果中间的一个失败了也没关系 我不想在这个脚本中加入try 来电 而且我不想将文件分成许
  • 确保在 ServerName 上启用默认 admin$ 共享

    运行 psexec 命令在同一网络上的服务器上远程安装或执行某些内容时 显示以下错误 无法访问服务器名称 找不到网络名称 确保在 ServerName 上启用默认 admin 共享 大多数参考文献建议您将以下内容添加到注册表中 但在我的例子
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • CKEditor 4 构建(缩小和丑化)

    在我们的构建过程中 使用 grunt 我们将所有脚本连接 缩小和丑化为一个脚本 也意味着仅一个请求 现在 CKEditor 4 似乎正在使用模块样式加载方法 谁能告诉我如何将 CKEditor 4 包含到包含所有必需源的项目中 这样以后就不
  • 前台服务不持续运行

    在我的应用程序中 我使用必须不断运行的前台服务 有时前台服务会停止 在什么情况下操作系统会终止我的服务 即使有足够的内存 电池已充满 手机正在充电也会发生 到目前为止 我的代码是这样的 public class ServiceTest ex
  • 使用 Xcode 5 在装有 iOS 5.1.1 的设备中运行 iOS 应用程序

    我正在尝试在运行 iOS 5 1 1 的 iPad 上安装 iOS 应用程序 当我使用带有开发配置文件的 Xcode 启动它时 出现以下错误 Xcode 无法安装或启动支持 64 位的应用程序 运行 iOS 6 0 之前版本的设备上的架构
  • 如何动态调用动态对象的方法?

    当我想在 C 中的任何对象上动态调用静态定义的 静态 是指 在编译时确定 的意义上 而不是 类级成员 的意义上 方法时 我可以使用反射获取该方法的句柄并调用它 typeof Foo GetMethod Bar Invoke foo new