问题标签 [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 回答
195006 浏览

c# - 如何使用反射来调用私有方法?

我的类中有一组私有方法,我需要根据输入值动态调用一个。调用代码和目标方法都在同一个实例中。代码如下所示:

在这种情况下,GetMethod()不会返回私有方法。BindingFlags我需要提供什么GetMethod()才能找到私有方法?

0 投票
5 回答
3002 浏览

c# - 如何在运行时加载的程序集中使用通用 log4net 引用?

我有一个单线程应用程序,它在运行时使用以下内容加载多个程序集:

我希望以这种方式加载的程序集使用与其他程序集相同的 log4net.ILog 引用。但似乎运行时加载的程序集完全有不同的引用,需要它们自己的配置。有谁知道单个 log4net.ILog 是否可以在运行时使用 .NET 接口加载的程序集中使用?

这是Program类中log4net.ILog的创建和支持代码:

0 投票
20 回答
866956 浏览

python - 如何列出 Python 模块中的所有函数?

我的系统上安装了一个 Python 模块,我希望能够查看其中可用的函数/类/方法。

我想help在每一个上调用该函数。在 Ruby 中,我可以做一些事情,比如ClassName.methods获取该类上所有可用方法的列表。Python中有类似的东西吗?

例如。就像是:

0 投票
1 回答
35299 浏览

java - 枚举类型为 Class 时如何使用 Java 反射?

我正在使用一个枚举,其中常量是一个类。我需要在常量上调用一个方法,但无法引入编译时依赖项,并且枚举在运行时并不总是可用(可选安装的一部分)。因此,我想使用反射。

这很容易,但我之前没有使用枚举的反射。

枚举看起来像这样:

使用反射调用常量方法的示例是什么?

0 投票
16 回答
21517 浏览

.net - INotifyPropertyChanged 属性名称 - 硬编码与反射?

使用 INotifyPropertyChanged 时指定属性名称的最佳方法是什么?

大多数示例将属性名称硬编码为 PropertyChanged 事件的参数。我正在考虑使用 MethodBase.GetCurrentMethod.Name.Substring(4) 但对反射开销有点不安。

0 投票
5 回答
33200 浏览

c# - 获取类型的默认构造函数的最有效方法

获取 System.Type 的默认构造函数(即没有参数的实例构造函数)的最有效方法是什么?

我正在按照下面的代码行思考一些事情,但似乎应该有一种更简单更有效的方法来做到这一点。

0 投票
4 回答
280 浏览

reflection - 通用反射 API?

前段时间我正在研究一种处理代码的算法,并且需要一个反射 API。我们对它在多种语言中的实现很感兴趣,但是一种语言的反射 API 不适用于任何其他语言。那么是否有任何类似“通用反射 API”的东西适用于所有语言,或者可能适用于一些主流语言(.NET、Java、Ruby、Python)

如果没有,是否有可能构建这样一个可以处理来自不同语言的类的东西。

您将如何使用一种统一的方式来处理来自多种语言的 OO 代码

0 投票
6 回答
7462 浏览

.net - 获取类属性名称

我的 winform 应用程序使用数据绑定收集数据。一切看起来都很好,除了我必须使用字符串将属性textedit链接:

Me.TextEdit4.DataBindings.Add(新 System.Windows.Forms.Binding(“EditValue”,Me.MyClassBindingSource,“MyClassProperty”,True))

这很好,但如果我更改类的属性名称,编译器显然不会警告我。

我希望能够通过反射获取属性名称但我不知道如何指定我想要的属性名称(我只知道如何在类的所有属性之间进行迭代)

任何的想法?

0 投票
8 回答
44715 浏览

c# - C#:获取列表中所有项目的任意属性的最大值和最小值

我有一个专门的列表,其中包含以下类型的项目IThing

有时我需要知道列表中所有事物的某个属性的最大值或最小值。因为“告诉不问”,我们让列表弄清楚:

这是非常好的。但有时我需要最小重量,有时需要最大速度等等。我不希望GetMaximum*()/GetMinimum*()每个属性都有一对。

一种解决方案是反思。像(捏住鼻子,强烈的代码气味!):

有没有更好、更不臭的方法来做到这一点?

谢谢,埃里克

编辑:@Matt:.Net 2.0

结论:.Net 2.0(使用 Visual Studio 2005)没有更好的方法。也许我们应该很快迁移到 .Net 3.5 和 Visual Studio 2008。多谢你们。

结论:有很多不同的方法比反射要好得多。取决于运行时和 C# 版本。看看 Jon Skeets 对差异的回答。所有答案都非常有帮助。

我会寻求 Sklivvz 的建议(匿名方法)。有几个来自其他人(Konrad Rudolph、Matt Hamilton 和 Coincoin)的代码片段实现了 Sklivvz 的想法。不幸的是,我只能“接受”一个答案。

非常感谢你。你们都可以感到“被接受”,尽管只有 Sklivvz 获得了学分;-)

0 投票
3 回答
2462 浏览

c# - 关于 C# 表达式树的建议

我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例)。

基本思想是,此方法会将某些内容添加到将用于验证的集合中。

该方法调用如下:

我这样做是因为我希望传入的属性名称是强类型的。

我正在努力解决的几件事..

  1. 在 DoSomething 中,我想获取PropertyInfoT 的类型(从传入的主体)并将其与 rule[] 一起添加到集合中。目前,我正在考虑使用 expression.Body 并从“Convert.([propertyname])”中删除 [propertyname] 并使用反射来获得我需要的东西。这看起来既麻烦又错误。有没有更好的办法?
  2. 这是我正在使用的特定模式吗?
  3. 最后,感谢任何关于我对我正在做的事情的误解的建议或澄清和/或 C# 表达式树的资源或良好信息。

谢谢!

伊恩

编辑:

DoSomething 方法中返回的一个示例expression.Body.ToString()是包含“Convert(t.MyProperty)”的字符串(如果从上面的示例调用)。

我确实需要它是强类型的,所以如果我更改属性名称它不会编译。

感谢您的建议!