问题标签 [fieldinfo]

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 投票
2 回答
204 浏览

c# - 获取反映对象状态的所有 MemberInfos 的最简单方法?

我需要使用反射获取代表对象确切状态的所有成员。所以这些成员包括字段 ( FieldInfo) 和自动属性 ​​( PropertyInfo)。我可以得到所有的FieldInfos 使用

并获取此链接中提到的自动实现的属性:

正如回答者所说,这确实很脆弱。有没有更标准的方法来实现这一目标?我在想,可能是这样的东西BindingFlags

0 投票
1 回答
3796 浏览

.net - BindingFlags 枚举中的 GetField、SetField、GetProperty 和 SetProperty 是什么?

我不知道这些是干什么用的。文档不是很清楚:

GetField指定应返回指定字段的值。

SetField指定应设置指定字段的值。

GetProperty指定应返回指定属性的值。

SetProperty指定应设置指定属性的值。对于 COM 属性,指定此绑定标志等效于指定 PutDispProperty 和 PutRefDispProperty。

如果我在BindingFlags枚举中指定它们,它们应该返回什么?我认为它与类型的属性和字段有关,但这个简单的测试说不:

对于和SetField,返回相同的集合。GetPropertySetProperty

0 投票
2 回答
2750 浏览

c# - 通过反射 C# 查找事件

我有一个关于 C# 中的事件和反射的问题。我目前正在使用 Microsoft Kinect (SDK 1.7) 进行编程,并希望实现与“Push-To-Press”方法不同的点击。ClickEvent 本身在 KinectControl 类中声明。

应该引发此 ClickEvent 并调用正确方法的控件是从 KinectControl 类继承的“Menu_Point”对象。

识别点击手势后,“源”和“Menu_Point”对象分别引发 ClickEvent,如下所示:

它调用以下方法:

在调用 Raise 方法并到达这一行之前,它工作正常: FieldInfo fieldInfo = source.GetType().GetField(eventName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.GetField); 我不知道为什么,但 fieldInfo 始终保持不变,如果试图访问它null会导致异常。eventDelegate不幸的是,我无法找到在这种情况下找不到 ClickEvent 的原因。该成员eventName的值“Click”是 KinectControl 类中事件的名称。我还在这个网站上搜索了答案(但到目前为止,没有一个解决方案对我有帮助),我阅读了各种有关 DotNetPearls.com 之类的博客,但我似乎仍然无法在这里找到错误。我希望你能帮助我。提前致谢!

编辑:添加BindingFlags.Static;在 FieldInfo 中忘记了这一点。谢谢@Michael Gunter。不过还是不行。

0 投票
1 回答
279 浏览

c# - System.Reflection GetNestetTypes 声明的所有字段名称或值

如何获取所有嵌套类中所有字段的列表

我尝试使用的代码来自这里的一篇文章,我可以将它分成两行或三行分隔的代码,它会起作用,问题是关于表达式,并使用最短/现代代码。

这将返回 fieldInfo 而不是名称或值,我更需要它作为字符串列表或更适合字段值和名称的字典,但现在可以使用列表。

谢谢。

0 投票
1 回答
2177 浏览

c# - 为什么 MemberInfo.GetCustomAttributes(Type) 被定义为返回一个属性数组?

假设我有FieldInfo,我可以通过两种方式进行:

没关系。

但是下面的返回[]而不是Attribute?

这个问题实际上与 MS 的设计选择无关。我的问题是我是否应该担心field.GetCustomAttributes返回特定属性类型的多个项目?在什么情况下会发生这种情况?

我猜永远不可能。我想我应该在编写一些反射辅助函数时处理它。

0 投票
2 回答
935 浏览

c# - 如果字段作为对象传递给函数,是否有办法获取字段名称,包括包含它的类和另一个包含此类的类?

我做下一件事......我将一些控件的字段传递给一些函数,例如:

函数 SetStr 应该理解传递对象的字段名称,并根据它的名称设置它的值。我尝试了一些东西,但无法得到我需要的东西,我只得到 System.String 作为名称。 在此处输入图像描述

这背后的整个想法是界面翻译。我想在文件中存储类似: [ScenarioSelector.lbl_labs_header.Text][TEXT_ON_THIS_LABEL] 并通过调用函数SetStr轻松设置它

也许您对如何以另一种方式或修复我的方式有一些想法?

PS基于Medinoc示例,我这样做了:

但仍然不知道如何获取对象实例来设置所需的值。

0 投票
1 回答
895 浏览

c# - C# 开发 .Net3.5 使用反射获取/设置嵌套属性和/或嵌套字段的值

我正在开发一个与从基类继承的数据块类一起使用的应用程序,并且我正在尝试使用反射来深入了解我的数据块类中的属性/字段。由于所有数据块类都是从基类(包含 Size 属性)派生/继承的,因此我可以使用基类类型的通用变量在我的应用程序中轻松创建对象;我还可以在顶层获取/设置属性。当属性是一个字段时会出现我的问题 - 我不知道如何进入该字段的下一个级别以获取基本属性和/或字段(如果适用)。

我的基类:

数据块类#1:

由于我所有的数据块类都从 MyBase.BaseClass 派生/继承,因此我可以将它用于我的变量 - 我不知道我将在运行时处理哪种类型的数据块类。

在我的 C# 应用程序中,我有以下代码块:

使用我的 MyBase.BaseClass 变量,我可以实例化一个 MyBase.BaseClass 对象:

处理前两个数据块类很容易——我可以使用 PropertyInfo 来获取/设置值。

现在,我的问题/问题是 RecordBlock3_class - 如何获取任何数组字段/属性中的项目之一,然后到 RecordBlock1_class 中的 Char/Color 属性?

我可以使用 FieldInto 来访问 ArrayFieldX 字段,但之后我就迷路了?

非常感谢任何帮助/建议!我还要说一件事,随着用户创建更多嵌套的类结构,数据块类可能会变得更复杂一些。

0 投票
2 回答
1622 浏览

c# - 解析字段/属性路径?

所以我写了这段代码,它可以从start对象解析属性路径,返回想要的属性,并为source可以调用返回属性的对象获取一个 out 参数:

现在假设我有以下层次结构:

示例用法:

我的问题是:这显然只适用于属性,我怎样才能让它同时适用于属性和字段?- 事情是,在 andMemberInfo之间很常见FieldInfoPropertyInfo但它没有 aGetValue所以我不能返回 a MemberInfo。我一直在阅读有关表达式的内容,但不确定它们在这里对我有什么帮助...

同样,我正在寻找的是(给定来源)解析以下内容的能力: X.Y.Z其中 X、Y、Z 可以是属性或字段。

编辑:

所以我稍微修改了代码来做我想做的事——但这不是你所说的干净整洁的代码,太多的输出参数:

用法:

它做了我想要的解析,但必须有更好的东西......

0 投票
0 回答
80 浏览

c# - 如何按照声明成员的顺序获取类的 MemberInfos?

假设我有以下课程:

如果我这样做:

我会按照它们在(field1然后field2)中声明的顺序获取这些字段。如果我做了同样的事情GetProperties

现在,考虑以下几点:

当我这样做时:

我得到以下输出:

显然,不是按照声明成员的顺序(即field1Prop1和)field2Prop2

有什么办法可以让成员按这个顺序排列吗?

谢谢。

编辑:

我关心订单,因为我使用 Unity3D(游戏引擎)并且我正在为某种类型编写自定义编辑器。该类型将具有字段和属性,我想按照声明它们的顺序绘制字段/属性。当然,unity 确实按照它们声明的顺序绘制字段,但它不绘制属性. 这就是为什么我要制作自己的抽屉/编辑器来支持属性绘制。

在此处输入图像描述

0 投票
0 回答
130 浏览

c# - 如何获取 C# FieldInfo 对象内的类型和值?

我试图为此找到解决方案,但我做不到。给定以下课程和程序:

如果我设置 Class1.SomeClass 的属性和字段,我如何序列化 Class1 并查看 SomeClass 的名称/值,使其打印如下:

我可以使用 GetType() 和 GetValue() 从非自定义类型的其他静态类型的 FieldInfo 和 PropertyInfo 中获取名称/值,但在这种情况下,FieldInfo(如果我没记错的话)是此自定义类型的元数据,但我看不到如何获取其中的成员类型的名称和值。

我希望这是有道理的...