无法使用反射访问受保护的 属性

Can't access protected property with Reflection

在断点处调试时,我无法使用反射访问 属性 Rectangle_1(和其他同级属性),它们在手表 window 中可见.

立即Window,如果我尝试

typeof(LoadRecipeSlots).GetProperty("Rectangle_1")

结果是null

但如果我尝试

typeof(LoadRecipeSlots).GetProperty("Visible")

结果是

{Boolean Visible}
Attributes: None
CanRead: true
CanWrite: true
CustomAttributes: Count = 1
DeclaringType: DeclaredProperties = {System.Reflection.PropertyInfo[65]}
GetMethod: {Boolean get_Visible()}
IsSpecialName: false
MemberType: Property
MetadataToken: 385877353
Module: {ControlsCF.dll}
Name: "Visible"
PropertyType: DeclaredProperties = {System.Reflection.PropertyInfo[0]}
ReflectedType: DeclaredProperties = {System.Reflection.PropertyInfo[7]}
SetMethod: {Void set_Visible(Boolean)}

属性Visible好像是parentclass的属性。

属性 Rectangle_1LoadRecipeSlots 中受到保护,我正在尝试使用反射从部分 class 定义中访问它,但我无法做到去做。然而,属性 可作为此部分 class 定义中的代码访问。

大部分代码是由正在使用的工具 auto-generated iX Developer 编写的,因此我无法创建一个简洁的示例。如果遗漏了什么,请告诉我,我会尝试将其添加到问题中。

typeof(LoadRecipeSlots).GetProperty("Rectangle_1")

将仅搜索 public 个属性。由于您的 属性 受到保护,您需要指定还应搜索 non-public 属性:

typeof(LoadRecipeSlots).GetProperty("Rectangle_1", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)

这是因为您要访问的 属性 是受保护的(而不是 public),而 GetProperty(String) 默认情况下只有 returns public 属性。

您可以像下面那样使用 GetProperty(String, BindingFlags) 来检索您受保护的 属性:

typeof(LoadRecipeSlots).GetProperty("Rectangle_1", BindingFlags.NonPublic)