如何动态投射对象?

2024-02-07

我很确定以前有人问过这个问题,但不幸的是我发现的唯一的就是this https://stackoverflow.com/questions/2903450/c-sharp-how-to-dynamically-cast-an-object这对我来说不是解决方案。在我当前的项目中,我做了类似的事情:

private object obj;

private void Initialize()
{
    obj.Initialize();
}

private void CreateInstanceA()
{
    obj = Activator.CreateInstance(typeof(MyClassA));
}

private void CreateInstanceB()
{
    obj = Activator.CreateInstance(typeof(MyClassB));
}

这段代码当然不起作用,因为我还没有转换obj因为它的类型是动态变化的。

我怎样才能动态地投射它?


三个选项:

  • 如果您控制这两个类,并且可以让它们实现一个包含您需要的所有内容的通用接口,那么就这样做 - 并转换为该接口
  • 如果您使用 C# 4 和 .NET 4,则可以使用动态类型 - 只需将变量声明为private dynamic obj;它会编译并在执行时找到正确的方法
  • 否则,使用反射来查找并调用该方法。

基本上casting基于执行时间类型没有意义,因为强制转换的一部分目的是给出compiler更多信息...而在这种情况下您根本没有这些信息。

如果你能实现的话,第一个选项是迄今为止最好的。

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

如何动态投射对象? 的相关文章

随机推荐

  • 如何将 Terser 与 webpack 结合使用

    我在用网页包 6 10 2 with Vue 3 9 3 此安装使用 Uglify js 当我运行时会引发错误npm run build因为它不能与 ES6 一起工作 为了解决这个问题 我删除了 Uglify 表单webpack confi
  • Mac/Cocoa:在我的应用程序中嵌入终端窗口

    有人发现是否可以将终端实例 嵌入 到应用程序中 如果它也继承了选项卡功能和拖放功能 那就太棒了 我在这里看到了几个类似的问题提到iTerm http iterm sourceforge net 但似乎应该有一个更简单的方法 就像 NSTer
  • RxJava:结合冷热观察来相互等待

    我的可观察量是这样定义的 val initLoading Observable fromCallable println System currentTimeMillis subscribeOn Schedulers computation
  • 等待 selenium 中的特定 URL

    我需要在 Chrome 浏览器中使用 Selenium 等待网站自动化中的特定 URL 用户将在我们的网站上进行在线支付 从我们的网站 用户被重定向到支付网关 当用户完成支付后 网关将重定向到我们的网站 我想收到从网关到我们网站的重定向通知
  • CMS编辑方案

    我只是想知道是否有一些方案是编辑 CMS 如 Wordpress Joomla 等 的正确方法 正确步骤 我所说的编辑是指 css javascript 到目前为止 我所做的方法是创建 custom css 和 custom js 等文件
  • 我可以在 React 应用程序中但在 React 组件之外安全地执行 DOM 操作吗?

    我正准备做我的第一个 React 项目 我的阅读已经很清楚地表明我需要让 React 处理所有使用虚拟 DOM 的渲染 并且我不应该执行任何会干扰虚拟 DOM 计算 然而 我无法弄清楚的是 假设我在包含其他 HTML 的页面中的 div a
  • 如何在R中组合多个数据框列

    我有一个 csv 文件 其中包含参与者的人口统计数据 数据是从我的研究数据库 REDCap 中编码和下载的 每个种族都有自己单独的列 也就是说 每个参与者在每一列中都有一个值 如果认可则为 1 如果未认可则为 0 它看起来像这样 SubjI
  • 如何使用自定义消息 git stash 存储未跟踪的文件?

    我该如何表现git stash include untracked带有自定义消息 我试过了 git stash include untracked message Foo and git stash Foo include untracke
  • Python 的 url 请求超出了最大重试次数

    我正在尝试抓取此页面 我使用的代码是这样的 page get https www uobgroup com online rates gold and silver prices page 当我运行此代码时出现此错误 Traceback m
  • Sharpssh 目录列表

    我正在编写一个应用程序 允许我从远程服务器上传和下载文件 我使用 sftp 作为传输协议 我需要将所有文件和目录列出到列表视图中 我使用 Sharpssh 作为 sftp 有人能指出我正确的方向吗 感谢转发 巴斯 范 乌延 Sftp sft
  • Android:前台服务与wakeLock

    我对 Android 比较陌生 所以我问的问题可能看起来很明显 尽管我已经阅读了所有类似标题的问题 并且进行了广泛的搜索 我需要长时间连续监控加速度计 建议采用两种方法 1 获取在加速器被监控的整个过程中保持的部分唤醒锁 和 2 在前台服务
  • 在 Apache 和 WSGI 上部署 Django

    虽然我找到了很多使用 WSGI 在 Apache 上部署 Django 的技术支持 但不幸的是 事实上它们都让我感到困惑 我无法让 Django 运行 我希望这真的是一件容易的工作 但作为一个新人 我面临着困难 我的里面有两个 Django
  • PInvoke、指针和数组复制

    我们正在 c net 4 0 Win7 x64 上构建一个应用程序 目标为 x32 我们在我们的应用程序中使用第三方库 我们知道这个库是用C 编写的 然而 为了让 c 开发人员使用这个库 他们使用 P Invoke 对其进行了包装 这就是我
  • VS2019 中 ASP.NET Core 2.2 项目中的分析器警告

    我基本上有一个从默认 Razor Pages 模板创建的默认 ASP NET Core 2 2 项目 现在 在解决方案资源管理器 gt 依赖项中有一个名为 Analyzers 的节点 首先 一开始我并不知道它是用来做什么的 我想我现在知道了
  • 使用 live() 进行验证并通过 ajax() 提交

    我在 JQuery 中有这个 form validate rules captcha required true remote url gb include captcha php type post messages captcha Co
  • 如何使按钮在引导程序中响应?

    我有这个代码
  • ASP.NET视图状态加密问题

    我正在尝试打开视图状态加密Always作为我在 IIS6 中托管的 ASP NET 3 5 网站的安全措施 我们已关闭视图状态 但仍在此字符串中看到一些 控制状态 在测试环境中 我可以简单地在 web config 中设置以下内容 并且我无
  • 如何围绕现有的 Javascript 库创建 Angular 包装器?

    我有一个纯 JavaScript 库 用户可以通过 npm 安装 我想向该库添加 创建一个 Angular 包装器 以便可以在 Angular 项目中无缝使用它 但我不确定如何执行此操作 我正在使用 Angular cli v6 这非常类似
  • Stringify 删除了具有 Symbol 属性的 JavaScript 对象

    我正在尝试通过 Express 发送 React 组件树 我的组件数组包括关键的 typeof Symbol for react element 财产 我在用着res send 除了该属性之外 对象的其余部分都会通过 有人告诉我这可能与 S
  • 如何动态投射对象?

    我很确定以前有人问过这个问题 但不幸的是我发现的唯一的就是this https stackoverflow com questions 2903450 c sharp how to dynamically cast an object这对我