问题标签 [reflection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
18 回答
321848 浏览

c# - 获取所有实现接口的类型

使用反射,我怎样才能以最少的代码获得所有使用 C# 3.0/.NET 3.5 实现接口并最小化迭代的类型?

这是我想重写的:

0 投票
3 回答
5019 浏览

c# - Compact Framework - 如何在没有默认构造函数的情况下动态创建类型?

我正在使用 .NET CF 3.5。我要创建的类型没有默认构造函数,因此我想将字符串传递给重载的构造函数。我该怎么做呢?

代码:

0 投票
3 回答
476 浏览

.net - 在从基本表单继承的表单上访问组件

我项目中的许多表单都继承自基本表单。很容易获得派生表单的 Controls 集合,但我还没有找到访问 Components 集合的简单方法,因为 VS 将其标记为私有。

我认为这可以通过反射来完成,但我不确定如何最好地去做,因为之前没有使用过反射。

现在,我正在使用一种笨拙的解决方法,其中我覆盖了一个函数 GetComponents 并返回一个我感兴趣的组件数组。这显然容易出错,因为很容易忘记实现被覆盖的函数或在添加组件时更新它。

如果有人有任何提示或可以提出更好的方法,我会很高兴听到。

0 投票
7 回答
12494 浏览

c# - 如何正确投射通过反射创建的对象

我正试图围绕反射来思考,所以我决定将插件功能添加到我正在编写的程序中。理解一个概念的唯一方法就是动手编写代码,所以我创建了一个由 IPlugin 和 IHost 接口组成的简单接口库,一个实现 IPlugin 的类的插件实现库,以及一个简单的实例化 IHost 实现类的控制台项目,该类对插件对象进行简单的工作。

使用反射,我想遍历我的插件实现 dll 中包含的类型并创建类型的实例。我能够使用此代码成功实例化类,但我无法将创建的对象强制转换为接口。

我尝试了这段代码,但我无法按预期投射 object o。我使用调试器逐步完成了该过程,并调用了正确的构造函数。Quickwatching 对象 o 向我展示了它具有我希望在实现类中看到的字段和属性。

我使代码与此一起使用。

以下是我的问题:

  1. Activator.CreateInstance(Type t) 返回一个对象,但我无法将该对象转换为该对象实现的接口。为什么?
  2. 我应该使用不同的 CreateInstance() 重载吗?
  3. 反射相关的提示和技巧是什么?
  4. 是否有一些我没有得到的反思的关键部分?
0 投票
5 回答
8571 浏览

vb.net - VB.NET 从可空类型获取底层 system.type

我正在尝试基于对象的属性创建数据集。例如,我有一个 Person 类的实例,其属性包括 ID、Forename、Surname、DOB 等。使用反射,我将列添加到基于对象属性的新数据集:

我的问题是其中一些属性是数据集不支持的可空类型。有没有办法从可为空的类型中提取底层系统类型?

谢谢。

0 投票
23 回答
967499 浏览

java - 什么是反射,它为什么有用?

什么是反射,它为什么有用?

我特别感兴趣Java,但我认为原则在任何语言中都是相同的。

0 投票
5 回答
1203 浏览

c# - 使用属性来减少枚举到枚举的映射和枚举/常量到动作的切换语句

我想每个人都看过这样的代码:

我们可以做类似的事情,而不是这种坏事:

现在我们可以使用反射来遍历 ServerEnum 并从枚举声明本身获取转换映射。

我在这里遇到的问题是在 Enum2Enum 属性的声明中。

这有效,但用 Enum e 替换对象 o 无效。我不想能够将对象传递给构造函数,只有其他枚举。

这无法编译。

编译错误是否有原因?除了以下内容之外,我还能如何传递映射所需的信息:

这似乎太冗长,但如果这是唯一的方法,那么我想我会使用它。

0 投票
2 回答
3568 浏览

c# - RuntimeTypeHandle 和 Type 有什么区别?

为什么我会在我的代码中使用一个而不是另一个?

0 投票
28 回答
244960 浏览

c++ - 如何向 C++ 应用程序添加反射?

我希望能够自省 C++ 类的名称、内容(即成员及其类型)等。我在这里说的是本地 C++,而不是托管 C++,它有反射。我意识到 C++ 使用 RTTI 提供了一些有限的信息。哪些额外的库(或其他技术)可以提供这些信息?

0 投票
18 回答
69256 浏览

.net - 能不能用反射来找到当前正在执行的方法的名字?

就像标题说的:反射能否给你当前正在执行的方法的名称。

由于海森堡问题,我倾向于猜测不是。你如何调用一个方法来告诉你当前的方法而不改变当前的方法是什么?但我希望有人能证明我错了。

更新:

  • 第 2 部分:这也可以用来查看属性的内部代码吗?
  • 第 3 部分:表演会是什么样的?

最终结果
我了解了 MethodBase.GetCurrentMethod()。我还了解到,我不仅可以创建堆栈跟踪,还可以根据需要只创建我需要的确切帧。

要在属性中使用它,只需使用 .Substring(4) 删除“set_”或“get_”。