Trong C#, nếu bạn sử dụng Type.GetFields()
với kiểu đại diện cho lớp dẫn xuất, nó sẽ trả về a) tất cả các trường khai báo rõ ràng trong lớp dẫn xuất, b) tất cả các trường sao lưu của thuộc tính tự động trong lớp dẫn xuất và c) tất cả các trường được khai báo rõ ràng trong lớp cơ sở.Tại sao không Type.GetFields() trả về các trường sao lưu trong một lớp cơ sở?
Tại sao d) trường sao lưu thuộc tính tự động trong lớp cơ sở bị thiếu?
Ví dụ:
public class Base {
public int Foo { get; set; }
}
public class Derived : Base {
public int Bar { get; set; }
}
class Program {
static void Main(string[] args) {
FieldInfo[] fieldInfos = typeof(Derived).GetFields(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.FlattenHierarchy
);
foreach(FieldInfo fieldInfo in fieldInfos) {
Console.WriteLine(fieldInfo.Name);
}
}
}
này sẽ chỉ hiển thị các lĩnh vực sao lưu của Bar, không Foo.
FlattenHierarchy Có những bình luận sau Chỉ định rằng cộng đồng và bảo vệ các thành viên tĩnh lên hệ thống phân cấp nên được trả lại. Các thành viên tĩnh riêng trong các lớp kế thừa không được trả về. Tĩnh thành viên bao gồm các trường, phương thức, sự kiện và thuộc tính. Các loại lồng nhau không được trả lại. Nó đề cập đến từ tĩnh ở đây, mà làm cho tôi nghĩ rằng nó sẽ không làm việc cho không có thành viên tĩnh – R2D2