通过类的反射属性获取,但不是从继承的类获取

net*_*jor 71 c# reflection

class Parent {
   public string A { get; set; }
}

class Child : Parent {
   public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我只需要获得属性B,没有属性A但是

Child.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)

返回两个属性:/

Fra*_*lli 139

您应该将BindingFlags.DeclaredOnly添加到您的标志中,即:

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)
Run Code Online (Sandbox Code Playgroud)

  • 这可能是另一种方式.Parent.GetProperties()并从父级和子级获取所有属性,如果子级继承了特定对象 (2认同)

Sco*_*iAS 7

尝试使用DeclaredOnly绑定标志.它应该将返回的属性限制为仅在您感兴趣的类上声明的属性.这是一个代码示例:

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
Run Code Online (Sandbox Code Playgroud)


era*_*zap 5

来自Type.cs :在这种情况下使用 DeclaredOnlyLookup

  private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
  internal const BindingFlags DeclaredOnlyLookup = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
Run Code Online (Sandbox Code Playgroud)