測試發現:當基底類別使用自動實作屬性 (Auto-Implemented Property) 時,對衍生類別執行反射取得欄位 (GetFields) 將無法取得對應的編譯器產生後端欄位;改用傳統手寫屬性則正常。
// Person.cs - 基底類別
public class Person
{
protected string _LastName; // 傳統欄位
public string FirstName { get; set; } // 自動實作屬性
public string LastName
{
get { return this._LastName; }
set { this._LastName = value; }
}
}
// Employee.cs - 衍生類別
public class Employee : Person
{
protected string Title;
}
// Program.cs - 反射測試
static void Main()
{
Console.WriteLine("Fields in Person instance:");
Person objPerson = new Person();
foreach (FieldInfo fi in objPerson.GetType().GetFields(
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
Console.WriteLine(fi.Name);
Console.WriteLine("\nFields in Employee instance:");
Employee objEmployee = new Employee();
foreach (FieldInfo fi in objEmployee.GetType().GetFields(
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
Console.WriteLine(fi.Name);
}

輸出顯示 Person 實例包含 _LastName 與編譯器產生的 <FirstName>k__BackingField,但 Employee 實例僅顯示 Title,缺少繼承自基底類別的自動實作屬性後端欄位。
基底類別使用自動實作屬性時,衍生類別透過反射 GetFields 無法取得該屬性的後端欄位。若需反射相容性,建議改用傳統手寫屬性配合明確宣告的欄位。