动态郎。运行时与反射

2024-02-17

我计划在我的新项目中使用动态关键字。但在介入之前,我想了解使用动态关键字而不是反射的优点和缺点。

在专业人士的帮助下,我可以找到关于动态关键字的信息:

  • 可读\可维护的代码。
  • 更少的代码行。

虽然与使用动态关键字相关的负面影响,我听到的是:

  • 影响应用程序性能。
  • Dynamic 关键字在内部是 Reflection 的包装。
  • 动态类型可能会成为难以发现的错误的滋生地。
  • 影响与以前的 .NET 版本的互操作性。

请帮我看看我遇到的利弊是否合理?


请帮我看看我遇到的利弊是否合理?

我对你的优点和缺点的担忧是,其中一些没有解决使用反射和使用动态之间的差异。动态类型导致的错误只有在任何动态类型系统的运行时都正确时才被发现。反射代码与使用动态类型的代码一样可能存在错误。

不要从优点和缺点的角度来思考它,而是以更中立的角度来思考它。我要问的问题是“什么是差异在使用反射和使用动态类型之间?”

第一:通过反射你得到exactly你要求什么。通过动态,您可以得到如果在编译时给出类型信息,C# 编译器会做什么。这些可能是两个完全地不同的东西。如果您有特定方法的 MethodInfo,并且使用特定参数调用该方法,则这就是被调用的方法, 时期。如果您使用“动态”,那么您将要求 DLR 在运行时确定 C# 编译器的意见,即哪个方法是正确的调用方法。 C# 编译器可能会选择一种与您实际想要的方法不同的方法。

第二:通过反射,您可以(如果您的代码被授予适当高水平的信任)进行私有反射。您可以调用私有方法、读取私有字段等等。我不知道这样做是否是一个好主意。对我来说这确实是危险和愚蠢的,但我不知道你的应用程序是什么。通过动态,您可以获得从 C# 编译器获得的行为;私有方法和字段不可见。

第三:使用反射,你编写的代码看起来就像机制。看起来您正在加载元数据源,提取一些类型,提取一些方法信息,并通过方法信息调用接收器对象上的方法。每一步都像是一个操作机制。有了动态,每一步看起来都像商业逻辑。在接收器上调用方法的方式与在任何其他代码中调用方法的方式相同。什么是重要的?在有些代码中,机制其实是最重要的。在某些代码中,该机制实现的业务逻辑是最重要的。选择强调正确抽象级别的技术。

第四:性能成本不同。使用反射,您不会获得任何缓存行为,这意味着操作通常会更慢,但维护缓存没有内存成本,并且每个操作的成本大致相同。使用 DLR,第一个操作确实非常慢,因为它执行大量分析,但分析会被缓存并重用。这会消耗内存,以换取某些情况下后续调用速度的提高。我不知道您的应用程序的速度和内存使用的正确平衡是什么。

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

动态郎。运行时与反射 的相关文章

随机推荐

  • 如何链接winsock.lib?

    在我的 C 课程中 我使用套接字 我在链接时遇到一些错误 因为在我看来 库 Winsock lib 丢失了 我包括这些 ifdef WIN32 include
  • Pro JavaScript 程序员面试问题(含答案)[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 重定向到登录页面时正确的 HTTP 状态代码是什么?

    当用户未登录并尝试访问需要登录的页面时 重定向到登录页面的正确 HTTP 状态代码是什么 我问是因为没有一个W3C 规定的 3xx 响应代码 http www w3 org Protocols rfc2616 rfc2616 sec10 h
  • 插入表..在链接服务器上执行不起作用

    这有效 返回结果集 exec select col count 1 from test dbo Table1 with nolock at svrA 当我尝试将结果集插入表中时 insert into rowcount sub tablen
  • 如何在 IIS 7 中配置 Http 处理程序?

    这就是我想做的 我创建了一个类库项目 这有一个类实现 IHttpHandler 接口 让我们 将该类命名为 ZipHandler 让我们 假设命名空间是 Zip 我希望每当任何 Http 请求提供 zip 文件 我的 ZipHandler
  • PHP 有类似 ruby​​ gem 的打包器吗?

    我是 PHP 程序员 了解 Rails Ruby 宝石捆绑器 http gembundler com 非常好的安装依赖项的工具 php有类似的东西吗 也许某些php框架有这样的工具 关于gem捆绑器的说明 Bundler 在应用程序的整个生
  • MalformedInputException 与 Files.readAllLines()

    我正在迭代一些文件 准确地说是 5328 个文件 这些文件是平均 XML 文件 最多 60 200 行 它们首先通过简单的方法进行过滤isXml源文件解析路径 Files walk Paths get home me development
  • 如何使用 codeigniter 查询获取每个产品的平均评分?

    我有评级表 其中对用户给出的每个产品进行评级 我正在检索所有评级记录 但同时我想根据每个产品获得平均评级 但我无法获得输出 Query this gt db gt select ratings this gt db gt select se
  • Python:名称解析;函数 def 的顺序

    我有一个非常简单的例子 usr bin env python a 1 NameError name a is not defined b 1 NameError name b is not defined c 1 NameError nam
  • Segue 未获取选定的行号

    我正在将数据从表视图控制器传递到详细视图 我尝试使用indexPath row直接在我的prepareForSegue方法 但是它显示错误 使用未解析的标识符 indexPath 因此 在搜索网络后 我设置了变量indexOfSelecte
  • 如何在 Android 版 Eclipse 中启用 LogCat/Console?

    在 Android 中编写一个简单的程序时 我错误地关闭了 LogCat 窗口 我想知道如何再次显示它 在 Eclipse 中 转到 窗口 gt 显示视图 gt 其他 gt Android gt Logcat Logcat 只是模拟器或设备
  • Excel VBA 在表格下方添加数据时扩展表格

    我在 Excel 中有一个表格 当用户在表格后添加数据时 该数据不属于该表格 我创建了一个可以执行来扩展表的代码 代码如下 Sub ExtendTableToLastRow Sheets Update Select If ActiveShe
  • 如何使用 Woocommerce WC_AJAX 类

    我正在开发一个基于 Wordpress WooCommerce 的商店 我使用ajax来调用数据 但我是通过 wp admin admin ajax php 在 function php 文件中使用我自己的函数来完成此操作 昨天我在 woo
  • ruby:“p *1..10”中的星号是什么意思

    the line p 1 10 做完全相同的事情 1 10 each x puts x 这将为您提供以下输出 ruby e p 1 10 1 2 3 4 5 6 7 8 9 10 例如 在使用 textmate 时 这是一个很好的快捷方式
  • 如何在ListView中正确使用TextSwitcher?

    My TextSwitcher对于每条记录ListView应显示第一个值 text1 然后是另一个值 text2 然后再次首先值 依此类推 仅当以下情况时才会发生text2不是空的 否则text1应始终显示 没有任何更改和动画 我已经创建了
  • log4j2.xml中每个包的Log4J不同日志级别

    我有一个 Java Web 应用程序log4j2 xml我需要为每个包设置不同的级别 例如 com myexample firstmodule 这应该是INFO level com myexample secondmodule 这应该是TR
  • 如何在 Python 中停止打印 OpenCV 错误消息

    Same as 这个问题在这里 https stackoverflow com questions 17567808 how to suppress opencv error message 17575610 17575610 除了 Pyt
  • 使用 DOM 解析 HTML 时保留文件偏移量?

    我要修改 img src 格式不太畸形的 HTML 中的属性 WordPress 帖子 我知道我可以采取简单的方法并使用正则表达式 但我担心穿着蓝色毛茸茸的衣服的人会在我睡梦中困扰我 https meta stackexchange com
  • 如何将字符串数据框列转换为日期时间作为年和周的格式?

    样本数据 Week Price 2011 31 1 58 2011 32 1 9 2011 33 1 9 2011 34 1 9 我有一个像上面这样的数据框 我想将 周 列类型从字符串转换为日期时间 My Code data Date Ti
  • 动态郎。运行时与反射

    我计划在我的新项目中使用动态关键字 但在介入之前 我想了解使用动态关键字而不是反射的优点和缺点 在专业人士的帮助下 我可以找到关于动态关键字的信息 可读 可维护的代码 更少的代码行 虽然与使用动态关键字相关的负面影响 我听到的是 影响应用程