问题标签 [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 投票
13 回答
22101 浏览

javascript - 通过调用prototype.constructor.apply 实例化一个JavaScript 对象

让我从一个我正在尝试做的具体例子开始。

我在表单中有一组年、月、日、小时、分钟、秒和毫秒组件[ 2008, 10, 8, 00, 16, 34, 254 ]。我想使用以下标准构造函数实例化一个 Date 对象:

如何将我的数组传递给此构造函数以获取新的 Date 实例?[更新:我的问题实际上超出了这个具体的例子。我想要一个内置 JavaScript 类的通用解决方案,比如 Date、Array、RegExp 等,它们的构造函数超出了我的能力范围。]

我正在尝试执行以下操作:

我可能new在某个地方需要一个“”。以上只是返回当前时间,就好像我调用了“ (new Date()).toString()”一样。我也承认我可能完全走错了方向:)

注意:请不要eval()一一访问数组项。我很确定我应该能够按原样使用数组。


更新:进一步的实验

由于还没有人能够提出一个可行的答案,所以我做了更多的尝试。这是一个新的发现。

我可以用我自己的班级做到这一点:

但它不适用于内在的 Date 类:

它也不适用于 Number:

也许这对于内在对象是不可能的?我正在使用 Firefox BTW 进行测试。

0 投票
5 回答
17995 浏览

c# - Reflection.Net:如何加载依赖项?

我尝试使用反射向我的 Windows.Net 应用程序添加一个插件系统;但是当有依赖的插件时它会失败。

插件类必须实现一个接口“IAddon”并有一个空的构造函数。
主程序使用反射加载插件:

当插件不使用依赖项时效果很好。但是,如果我的插件引用并使用保存在磁盘中插件附近的另一个 DLL (C:\Temp\TestAddon\MyTools.dll),它将失败:
System.IO.FileNotFoundException: 无法加载文件或程序集 'MyTools.dll ' 或其依赖项之一。

我不想在我的可执行文件附近复制插件 DLL,我该如何告诉 .Net 运行时在“C:\Temp\TestAddon\”中搜索任何依赖项?

请注意,添加

不要改变任何东西。

0 投票
4 回答
15525 浏览

java - 如何测试方法返回类型是否匹配List

什么是最简单的测试方法(使用反射),给定的方法(即 java.lang.Method 实例)是否具有返回类型,可以安全地转换为 List<String>?

考虑这个片段:

方法 1、2、3 均满足要求。对方法 1 进行测试非常容易(通过 getGenericReturnType(),它返回 ParameterizedType 的实例),但对于方法 2 和 3,它并不那么明显。我想,通过遍历所有 getGenericSuperclass() 和 getGenericInterfaces(),我们可以非常接近,但我看不到,如何将 List<E> 中的 TypeVariable(发生在超类接口中的某处)与实际类型参数(即此 E 与字符串匹配的位置)。

或者也许有一种完全不同(更简单)的方式,我忽略了?

编辑:对于那些研究它的人,这里是方法 4,它也满足要求,并且显示了更多需要调查的案例:

0 投票
4 回答
3345 浏览

java - java.beans.Introspector getBeanInfo 不获取任何超接口的属性

我刚刚注意到 java.beans.Introspector getBeanInfo 没有获取任何超级接口的属性。例子:

即使 name 是从 Person 继承的,对 Employee 进行内省也只会产生薪水。

为什么是这样?我宁愿不必使用反射来获取所有吸气剂。

0 投票
8 回答
46407 浏览

.net - 如何读取程序集属性

在我的程序中,如何读取 AssemblyInfo.cs 中设置的属性:

我想向我的程序的用户显示其中一些值,所以我想知道如何从主程序和我正在使用的组件程序集中加载它们。

0 投票
5 回答
376 浏览

c# - 如何判断类属性是否具有公共集 (.NET)?

我有这个:

我的数据绑定实用程序类这样做:

但是 PropertyInfo.CanWrite 不关心该集合是否可公开访问,只关心它是否存在。

我如何确定是否有公共集,而不仅仅是任何集?

0 投票
3 回答
1355 浏览

api - 通过反射的方法参数值

我正在尝试使用反射记录方法的参数。我也阅读了关于 StackOverflow 上发布的关于此问题的较早问题,这将我指向 CLR API。

是否有可能,有人可以指出我正确的方向,至于我将如何获取使用 API 传递的参数值?

0 投票
4 回答
1352 浏览

.net - .NET 带反射的动态对象

如何通过反射确定 aNullable(of Enum)是否确实是a ?Enum

我正在使用一种方法,该方法使用从数据库调用中检索到的类型动态填充类型的T对象IDataReader。从本质上讲,它循环遍历数据读取器的序数,T并填充与序数名称匹配的属性(也抛出了一些属性魔术来更改列名)。在所有其他情况下,它都很好用,但是当我检查属性时BaseTypeSystem.Enum我发现,System.ValueType 因此,我的枚举检查失败并且方法炸弹。

[编辑: Type.IsEnum不起作用我需要它。这里的主要问题是TBaseType 层次结构中没有任何内容表明它是Enum. 就好像让它成为一种Nullable类型就失去了我的Enum权利。]

有任何想法吗?

0 投票
2 回答
211 浏览

c# - 我应该做哪些事情来制作高性能且强大的反射缓存?

在 .NET 3.5 中,我将使用 System.Reflection 来使用 AOP(可能在 Castle 的 Windsor 拦截器的上下文中)来执行诸如定义需要在方法级别执行哪些安全操作等事情。我有听说反射的某些部分很慢(我已经阅读了有关它的 MSDN 文章),并且想缓存这些部分(无论如何,当我更接近生产代码时)。我想验证我的方法:

  • 缓存键是 {type} + {区分大小写的方法名称} + {参数类型列表}
  • 缓存键对象可以通过 Equals 操作进行比较
  • 缓存有效负载是 {MethodInfo} + {方法上定义的自定义属性列表}
  • 缓存通过构造函数注入注入到我的拦截器
  • 缓存可以维护很长时间(基于我不会编写自修改代码的假设;-))

更新:

我不打算通过反射来调用我自己写的方法;只是(目前)查找我想要注入功能的属性,其中属性定义了要注入的行为。目前我的拦截器将使用 Castle 的 Windsor IInterceptor 机制,直到我发现有理由更改它。

0 投票
2 回答
1074 浏览

.net - 程序集未正确保存

我有一些非常简单的代码来生成程序集并在包含的类型上调用方法。该方法被调用并正确运行,但是当我使用反射器查看生成的程序集时,我看不到类型。

下面是示例代码:

这是Reflector的相应反汇编:

... 和 ...

谁能帮我正确保存程序集?