2010-02-15 31 views
24

Với Type.GetProperties() bạn có thể truy xuất tất cả thuộc tính của lớp hiện tại và thuộc tính public của lớp cơ sở. Có phải bằng cách nào đó có thể nhận được các thuộc tính private của lớp cơ sở không?Nhận các thuộc tính/phương thức riêng của lớp cơ sở với sự phản ánh

Cảm ơn

class Base 
{ 
    private string Foo { get; set; } 
} 

class Sub : Base 
{ 
    private string Bar { get; set; } 
} 


     Sub s = new Sub(); 
     PropertyInfo[] pinfos = s.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); 
     foreach (PropertyInfo p in pinfos) 
     { 
      Console.WriteLine(p.Name); 
     } 
     Console.ReadKey(); 

này sẽ chỉ in "Bar" vì "Foo" là trong cơ sở hạng nhất và tư nhân.

Trả lời

41

Để có được tất cả các tài sản (công + tin/bảo vệ/nội bộ, tĩnh + chẳng hạn) của một trao Type someType (có thể sử dụng GetType() để có được someType):

PropertyInfo[] props = someType.BaseType.GetProperties(
     BindingFlags.NonPublic | BindingFlags.Public 
     | BindingFlags.Instance | BindingFlags.Static) 
+6

Ngoài ra, có thể lặp qua các loại cơ sở (type = type.BaseType), cho đến khi type.BaseType rỗng, để có được một bức tranh hoàn chỉnh. –

+3

tiếc là điều này không làm việc cho các thuộc tính riêng của lớp cơ sở. chỉ dành cho thừa kế công cộng và được bảo vệ – Fabiano

+0

@Fabiano - không công khai bao gồm riêng tư. –

2

Duyệt qua các loại cơ sở (type = loại .BaseType), cho đến khi type.BaseType là null.

Các vấn đề liên quan