Nhận bằng thuộc tính phản ánh của lớp, nhưng không phải từ lớp kế thừa


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

class Child : Parent {
   public string B { get; set; }
}

Tôi chỉ cần lấy tài sản B, không có tài sản A nhưng

Child.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)

trả về cả hai thuộc tính: /

Câu trả lời:


155

Bạn nên thêm BindingFlags.DeclaredOnly vào cờ của mình, tức là:

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)

2
Điều này có thể giải quyết cách khác. Parent.GetProperties () và nhận được tất cả tài sản từ cha mẹ và con nếu đối tượng cụ thể được thừa hưởng bởi những đứa trẻ
Maiko Kingma

10

Hãy thử sử dụng cờ ràng buộc DeclaredOnly. Nó sẽ giới hạn các thuộc tính được trả về chỉ những thuộc tính được khai báo trên lớp mà bạn quan tâm. Và đây là một mẫu mã:

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);


4

Từ Type.cs : Trong trường hợp này, hãy sử dụng 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;

1
Thật thú vị, tôi sẽ sử dụng cách tiếp cận này và xác định const BindingFlags của riêng tôi. +1 để xem xét mã nguồn.
C. Tewalt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.