Tôi là một người mới tuyệt đối trong sự phản ánh trong C#. Tôi muốn sử dụng sự phản chiếu để truy cập tất cả các trường riêng trong một lớp, bao gồm cả các trường được kế thừa.C#: Truy cập các thành viên cá nhân được thừa kế riêng tư thông qua sự phản ánh
Tôi đã thành công trong việc truy cập tất cả các trường riêng tư, ngoại trừ các trường được kế thừa, cũng như tất cả trường công khai và được bảo vệ. Tuy nhiên, tôi đã không thể truy cập vào các trường riêng, được kế thừa. Ví dụ sau minh họa:
class A
{
private string a;
public string c;
protected string d;
}
class B : A
{
private string b;
}
class test
{
public static void Main(string[] Args)
{
B b = new B();
Type t;
t = b.GetType();
FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance);
foreach(FieldInfo fi in fields){
Console.WriteLine(fi.Name);
}
Console.ReadLine();
}
}
Không tìm thấy trường B.a.
Thậm chí có thể thực hiện được điều này không? Giải pháp hiển nhiên sẽ là chuyển đổi các trường riêng, được thừa kế thành các trường được bảo vệ. Điều này, tuy nhiên, là ngoài tầm kiểm soát của tôi vào lúc này.
Thay vì mệnh đề "if" để bỏ qua các trường kế thừa, bạn chỉ có thể chỉ định BindingFlags.DeclaredOnly. – Timwi
khi sử dụng BaseType trên một Type, chúng ta có thể truy cập thành viên private class Base không. Không có điều này không giải quyết bất kỳ vấn đề thế giới thực cho tôi, nhưng tôi chỉ tò mò vì sử dụng thuộc tính BaseType của lớp Type tôi tin rằng (trong khi viết nó) tôi đang truy cập Childs lớp cơ sở thành viên, do đó, có cách nào khác với ra bằng cách sử dụng BaseType bất động sản để đạt được như vậy? – Zenwalker