为什么建议在 .NET 中使用反射?

2024-01-12

使用它绝对是一个好的做法吗?

项目中有哪些可能的情况需要反思?


反射的主要价值在于它可用于检查程序集、类型和成员。它是一个非常强大的工具,用于确定未知程序集或对象的内容,并且可用于多种情况。

Reflection 的反对者会说它很慢,与静态代码执行相比确实如此——但是 Reflection 在整个 .NET 框架中都得到了使用,并且只要它不被滥用,它就可以成为工具包中非常强大的工具。

一些有用的应用程序:

  • 确定程序集的依赖关系

  • 符合接口、派生自基类/抽象类并通过属性搜索成员的位置类型

  • (臭味)测试 - 如果您依赖于一个不可测试的类(即它不允许您轻松构建假的),您可以使用反射在类中注入假值 - 它不漂亮,也不推荐,但是它可以是一个方便的工具。

  • 调试 - 转储已加载程序集的列表、它们的引用、当前方法等...

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

为什么建议在 .NET 中使用反射? 的相关文章

  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 视频流基础设施

    我们想建立一个实时视频聊天网站 并正在寻找基本的架构建议和 或针对要使用的特定框架的推荐 以下是该网站的基本功能 大多数流媒体将由一个人通过网络摄像头等进行现场直播 通常由 1 10 人观看 但最多可能有 100 多名观众 音频和视频不必是
  • Spark 对分隔数据进行排序

    我是 Spark 新手 您能告诉我以下代码有什么问题吗 val rawData USA E001 ABC DE 19850607 IT 100 UK E005 CHAN CL 19870512 OP 200 USA E003 XYZ AB
  • 获取上周唯一的最新数据并对某些列求和

    仅获取上周的最新数据并对某些列求和 我用数据 实际结果和预期做了一个例子 http rextester com HMB12638 http rextester com HMB12638 Taking first as example use
  • Select2限制标签数量

    有没有办法限制用户可以使用 Select2 添加到输入字段的标签数量 I have tags select2 containerCssClass supplierTags placeholder Usual suppliers minimu
  • 如何使用 Bash 获取屏幕会话中的命令历史记录?

    如果我开始一个屏幕会话screen dmS name 我如何使用脚本访问该屏幕会话的命令历史记录 Using the the last executed command appears even in screen 我在系统上使用默认的 b
  • 推理 Big O 的正式定义时遇到一些困难

    我的教授最近回顾了 Big O 的正式定义 老实说 即使他向几个不同的学生解释了它 我们似乎仍然没有理解它的核心 理解上的问题主要出现在我们经历的以下例子中 到目前为止 我的推理如下 当您将函数的最高项乘以常数时 您会得到一个新函数 该新函
  • 循环变量覆盖全局变量

    在Python中 为什么循环变量会覆盖已经定义的全局变量 将循环变量放入模块的全局命名空间而不是仅用于循环的新本地命名空间似乎违反直觉 这是一个显示我正在谈论的内容的示例 c 3 14 print before loop c format
  • 如何从 Blazor 中的另一个组件重新渲染组件?

    我有一个电子商务Blazor服务器项目 我想重新渲染推车组件将商品添加到购物车后产品组件 我尝试将 Cart 组件继承到 Product 组件 并运行 Cart 组件的公共方法来重新渲染其组件 添加到购物车方法产品组件 产品 剃须刀 pub
  • 如何对一周中每一天的每个小时进行分组和绘图

    我需要帮助弄清楚如何绘制子图 以便与显示的数据框进行轻松比较 Date A B C 2017 03 22 15 00 00 obj1 value a other 1 2017 03 22 14 00 00 obj2 value ns oth
  • Jenkins 管道:kubectl:未找到

    我有以下 Jenkinsfile node stage Apply Kubernetes files withKubeConfig credentialsId jenkins deployer serverUrl https 192 168
  • 当 AngularJS 控制器加载时运行一次

    我有一些事情只需要在控制器加载时完成一次 最好的方法是什么 我读过一些有关 运行块 的内容 但我不太明白它是如何工作的 一些伪代码 when app resolove some stuff load a view controllerA C
  • 如何使用 SnakeYaml 加载自定义对象列表

    我一直在尝试将以下 yaml 反序列化为List
  • Jenkins 蓝海:Maven 看不到 Java

    即使路径存在 我也收到错误 var jenkins home tools hudson model JDK jdk8 bin java 未找到 edi debatcher master LNI22Y2C5V3VECCBCFPVB3ZUWJJ
  • 如何检查双精度数是否可以放入浮点数而不转换为无穷大

    是否有一种标准方法来检查 64 位浮点数是否可以转换为 32 位浮点数而不转换为 Infinity 我知道事后可以检查 Inf Convert ToSingle 不会这样做 为了测试是否double value d将转换为float在不产生
  • 如何强制 PhpMailer 5.2 使用 TLS 1.2

    最近我使用的第三方电子邮件服务提供商发生了变化 他们禁用了对 TLS 1 0 和 TLS 1 1 的支持 我为仍然使用 php 5 3 和 phpmailer 5 2 的古老系统提供支持 我的测试表明 TLS 1 2 已启用 但是 禁用 T
  • 使用带有自定义键的 HashMap

    快速问题 如果我想使用HashMap以自定义类为键 must我覆盖hashCode功能 如果我不重写该函数 它将如何工作 如果您不覆盖 hashCode AND equals 您将获得默认行为 即每个对象都是不同的 无论其内容如何
  • WF4 InstancePersistenceCommand 中断

    我有一个 Windows 服务 正在运行工作流程 工作流程是从数据库加载的 XAML 用户可以使用重新托管的设计器定义自己的工作流程 它配置有一个 SQLWorkflowInstanceStore 实例 以便在空闲时保留工作流 它基本上源自
  • 有什么方法可以判断任意 .docx 文件是否采用 Strict Office Open XML 格式与过渡格式? (ECMA-376)

    我在网上搜索过 没有找到任何程序或工具可以区分那些编码为严格 ECMA 376 和非严格 ECMA 376 的 docx 文件 对于 xlsx 文件也是如此 大多数讨论都集中在给定应用程序支持哪些格式 例如LibreOffice 但不知道如
  • 一起录制视频和屏幕并用 Javascript 覆盖

    我想在网络摄像头旁边记录用户的屏幕并将结果显示为叠加层 如下所示 我假设在录制时我可以在两个单独的视频元素中显示多个流并用 CSS 覆盖它们 然而 我该如何save结果是两个视频的叠加 这可以在纯 JS 中实现 如下所示 通过 getUse
  • 为什么建议在 .NET 中使用反射?

    使用它绝对是一个好的做法吗 项目中有哪些可能的情况需要反思 反射的主要价值在于它可用于检查程序集 类型和成员 它是一个非常强大的工具 用于确定未知程序集或对象的内容 并且可用于多种情况 Reflection 的反对者会说它很慢 与静态代码执