问题标签 [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.
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 进行测试。
c# - Reflection.Net:如何加载依赖项?
我尝试使用反射向我的 Windows.Net 应用程序添加一个插件系统;但是当有依赖的插件时它会失败。
插件类必须实现一个接口“IAddon”并有一个空的构造函数。
主程序使用反射加载插件:
当插件不使用依赖项时效果很好。但是,如果我的插件引用并使用保存在磁盘中插件附近的另一个 DLL (C:\Temp\TestAddon\MyTools.dll),它将失败:
System.IO.FileNotFoundException: 无法加载文件或程序集 'MyTools.dll ' 或其依赖项之一。
我不想在我的可执行文件附近复制插件 DLL,我该如何告诉 .Net 运行时在“C:\Temp\TestAddon\”中搜索任何依赖项?
请注意,添加
不要改变任何东西。
java - 如何测试方法返回类型是否匹配List
什么是最简单的测试方法(使用反射),给定的方法(即 java.lang.Method 实例)是否具有返回类型,可以安全地转换为 List<String>?
考虑这个片段:
方法 1、2、3 均满足要求。对方法 1 进行测试非常容易(通过 getGenericReturnType(),它返回 ParameterizedType 的实例),但对于方法 2 和 3,它并不那么明显。我想,通过遍历所有 getGenericSuperclass() 和 getGenericInterfaces(),我们可以非常接近,但我看不到,如何将 List<E> 中的 TypeVariable(发生在超类接口中的某处)与实际类型参数(即此 E 与字符串匹配的位置)。
或者也许有一种完全不同(更简单)的方式,我忽略了?
编辑:对于那些研究它的人,这里是方法 4,它也满足要求,并且显示了更多需要调查的案例:
java - java.beans.Introspector getBeanInfo 不获取任何超接口的属性
我刚刚注意到 java.beans.Introspector getBeanInfo 没有获取任何超级接口的属性。例子:
即使 name 是从 Person 继承的,对 Employee 进行内省也只会产生薪水。
为什么是这样?我宁愿不必使用反射来获取所有吸气剂。
.net - 如何读取程序集属性
在我的程序中,如何读取 AssemblyInfo.cs 中设置的属性:
我想向我的程序的用户显示其中一些值,所以我想知道如何从主程序和我正在使用的组件程序集中加载它们。
c# - 如何判断类属性是否具有公共集 (.NET)?
我有这个:
我的数据绑定实用程序类这样做:
但是 PropertyInfo.CanWrite 不关心该集合是否可公开访问,只关心它是否存在。
我如何确定是否有公共集,而不仅仅是任何集?
api - 通过反射的方法参数值
我正在尝试使用反射记录方法的参数。我也阅读了关于 StackOverflow 上发布的关于此问题的较早问题,这将我指向 CLR API。
是否有可能,有人可以指出我正确的方向,至于我将如何获取使用 API 传递的参数值?
.net - .NET 带反射的动态对象
如何通过反射确定 aNullable(of Enum)
是否确实是a ?Enum
我正在使用一种方法,该方法使用从数据库调用中检索到的类型动态填充类型的T
对象IDataReader
。从本质上讲,它循环遍历数据读取器的序数,T
并填充与序数名称匹配的属性(也抛出了一些属性魔术来更改列名)。在所有其他情况下,它都很好用,但是当我检查属性时BaseType
,System.Enum
我发现,System.ValueType
因此,我的枚举检查失败并且方法炸弹。
[编辑:
Type.IsEnum
不起作用我需要它。这里的主要问题是T
BaseType 层次结构中没有任何内容表明它是Enum
. 就好像让它成为一种Nullable
类型就失去了我的Enum
权利。]
有任何想法吗?
c# - 我应该做哪些事情来制作高性能且强大的反射缓存?
在 .NET 3.5 中,我将使用 System.Reflection 来使用 AOP(可能在 Castle 的 Windsor 拦截器的上下文中)来执行诸如定义需要在方法级别执行哪些安全操作等事情。我有听说反射的某些部分很慢(我已经阅读了有关它的 MSDN 文章),并且想缓存这些部分(无论如何,当我更接近生产代码时)。我想验证我的方法:
- 缓存键是 {type} + {区分大小写的方法名称} + {参数类型列表}
- 缓存键对象可以通过 Equals 操作进行比较
- 缓存有效负载是 {MethodInfo} + {方法上定义的自定义属性列表}
- 缓存通过构造函数注入注入到我的拦截器
- 缓存可以维护很长时间(基于我不会编写自修改代码的假设;-))
更新:
我不打算通过反射来调用我自己写的方法;只是(目前)查找我想要注入功能的属性,其中属性定义了要注入的行为。目前我的拦截器将使用 Castle 的 Windsor IInterceptor 机制,直到我发现有理由更改它。
.net - 程序集未正确保存
我有一些非常简单的代码来生成程序集并在包含的类型上调用方法。该方法被调用并正确运行,但是当我使用反射器查看生成的程序集时,我看不到类型。
下面是示例代码:
这是Reflector的相应反汇编:
... 和 ...
谁能帮我正确保存程序集?