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

如何从类型创建新的对象实例

人们可能并不总是在编译时知道Type对象的 ,但可能需要创建Type.

如何从 a 中获取新的对象实例Type

0 投票
16 回答
74145 浏览

如何动态评估 C# 代码?

我可以eval("something()");在 JavaScript 中动态执行代码。有没有办法让我在 C# 中做同样的事情?

我正在尝试做的一个例子是:我有一个整数变量(比如i),并且我有多个属性名称:“Property1”、“Property2”、“Property3”等。现在,我想执行一些操作关于“Property i ”属性的值i

这对于 Javascript 来说非常简单。有没有办法用 C# 做到这一点?

0 投票
1 回答
1429 浏览

通过反射使用 C# 和 OpenOffice

我正在编写一些代码以直接从 C#粘贴到当前活动的OpenOffice文档中。我不能包含任何 OpenOffice 库,因为我们不想打包它们,所以我们使用反射来访问OpenOffice API

我的问题涉及通过反射使用调度程序。我无法弄清楚传递给它的正确参数,由于类型不匹配,给了我一个可爱的“TargetInvocationException”。

我该如何解决?

0 投票
3 回答
2981 浏览

在 .net 中以编程方式访问调用堆栈

如何以编程方式访问调用堆栈?

0 投票
2 回答
10315 浏览

任何人都知道快速获取枚举值的自定义属性的方法吗?

这可能最好用一个例子来说明。我有一个带有属性的枚举:

我想从一个实例中获取这些属性:

由于这是使用反射,我预计会有些慢,但是当我已经有枚举值的实例时,将枚举值转换为字符串(反映名称)似乎很麻烦。

有没有人有更好的方法?

0 投票
4 回答
5530 浏览

如何在当前程序集中找到具有特定名称的 C# 接口的实现?

我有一个调用接口IStep,可以进行一些计算(参见“名词王国中的执行”)。在运行时,我想按类名选择适当的实现。

0 投票
4 回答
985 浏览

在 Java 中执行 RFC 计算的算法

Java 类的 RFC 包含所有方法,这些方法可以响应类对象的消息或类中的某些方法调用。RFC = M + R 其中 M = 类中的方法数。R = 从 M 中直接调用的其他方法的总数。

认为 C 是 .class 而 J 是我们需要计算 RFC 的 .java 文件。

这里 M=6 和 R=9 (不要担心循环内的调用。它被认为是单个调用)

计算 M 很容易。使用类加载器加载 C 并使用反射来获取方法的计数。

计算 R 不是直接的。我们需要计算类的方法调用次数。仅限第一级。

计算 RI 必须使用正则表达式。通常格式是(不使用 . 的调用不计算在内)

或者

当调用返回直接成为另一个方法的参数时,没有分号。或者

这变成了两个方法调用

你还能想到什么其他的方法调用模式?除了使用 RegEx 之外,还有其他方法可以用来计算 R。


更新:
@McDowell 看起来使用 BCEL 我可以简化整个过程。让我试试。

0 投票
13 回答
66976 浏览

.NET 反射的成本是多少?

我经常听到反射的使用有多糟糕。虽然我通常避免反思并且很少发现没有它就无法解决我的问题的情况,但我想知道......

对于那些在应用程序中使用反射的人,您是否测量过性能命中,它真的那么糟糕吗?

0 投票
16 回答
99249 浏览

如何在 C# 中拦截方法调用?

对于给定的类,我希望具有跟踪功能,即我希望记录每个方法调用(方法签名和实际参数值)和每个方法退出(只是方法签名)。

假设:

  • 我不想为 C# 使用任何 3rd 方 AOP 库,
  • 我不想将重复的代码添加到我要跟踪的所有方法中,
  • 我不想更改类的公共 API - 类的用户应该能够以完全相同的方式调用所有方法。

为了使问题更具体,我们假设有 3 个类:

如何在不修改Caller.Call方法并且不将调用显式添加到Traced.Method1Traced.Method2的情况下为每次调用Method1Method2调用Logger.LogStartLogger.LogEnd

编辑:如果允许我稍微更改 Call 方法,解决方案是什么?

0 投票
4 回答
16609 浏览

Python超类反射

如果我有 Python 代码

我有类C,有没有办法遍历它的超类(AB)?类似伪代码的东西:

一种解决方案似乎是检查模块getclasstree功能。

但这是实现目标的“Pythonian”方式吗?