在偵錯一些資料時,實體型別裡的資料有時是繼承而來
而物件裡的方法,也常常會使用到基底的方法或是參數
雖然這些資料的出發點是不希望開發者去在意的
若是可以拿到這些資料,在偵錯上有時反而可以幫上一些忙
在之前的文章有提到怎麼反過反射拿到私有方法,進行測試
class 裡有field 跟 property 的區分,而透過反射取得的方法也是不同的
若是想看到 baseClass 的 private property/field 其實也能透過反射取得
在 .net 裡,只要是實體型別的資料,大多都能透過反射取得
var b = new B(123);
var prop = b.GetType().GetProperty("ID", BindingFlags.NonPublic | BindingFlags.Instance);
prop.GetValue(b).Dump();
var field = b.GetType().GetField("_test", BindingFlags.NonPublic | BindingFlags.Instance);
field.GetValue(b).Dump();
var baseField = b.GetType().BaseType.GetField("_id", BindingFlags.NonPublic | BindingFlags.Instance);
baseField.GetValue(b).Dump();
public class BaseC
{
private readonly int _id;
public BaseC(int id)
{
_id = id;
}
}
public class B: BaseC
{
private readonly int _test;
private int ID {set;get;}
public B(int id): base(id)
{
_test = 110;
ID = 999;
}
}
實際輸出
參考資料
https://dotblogs.com.tw/AceLee/2023/06/21/133023
https://stackoverflow.com/a/6961970