我們定義一個類DemoA,再定義一個類DemoB繼承DemoA。當構造一個DemoB類對象后,我們可以通過其調用基類DemoA中的方法來反射子類DemoB的成員。
新建一個.NET Core控制台項目,其代碼如下:
using System; namespace RF { /// <summary> /// DemoA類為基類 /// </summary> class DemoA { /// <summary> /// 反射DemoA類及其子類的所有屬性成員 /// </summary> public void DisplayProperties() { var properties = this.GetType().GetProperties(); Console.WriteLine($"Properties in class: \"{this.GetType().Name}\" : "); foreach (var property in properties) { Console.WriteLine($"Property \"{property.Name}\" in class \"{property.DeclaringType.Name}\""); } Console.WriteLine(); } /// <summary> /// DemoA類的屬性NumberA會被DisplayProperties方法所反射 /// </summary> public int NumberA { get; set; } /// <summary> /// 由於DemoB類的Name屬性隱藏了DemoA類的Name屬性,所以在DemoB類中調用DemoA類的DisplayProperties方法時,DemoA類的Name屬性不可見,反射的是DemoB類中的Name屬性 /// </summary> public string Name { get; set; } /// <summary> /// 由於DemoB類的Age屬性重寫了DemoA類的Age屬性,所以在DemoB類中調用DemoA類的DisplayProperties方法時,DemoA類的Age屬性不可見,反射的是DemoB類中的Age屬性 /// </summary> public virtual int Age { get; set; } } /// <summary> /// DemoB類繼承DemoA類,在DemoB類的對象上調用DemoA類的DisplayProperties方法時,也會反射DemoB類的所有屬性 /// </summary> class DemoB : DemoA { /// <summary> /// DemoB類的屬性NumberB也會被DisplayProperties方法所反射 /// </summary> public int NumberB { get; set; } /// <summary> /// 由於DemoB類的Name屬性隱藏了DemoA類的Name屬性,所以在DemoB類中調用DemoA類的DisplayProperties方法時,DemoA類的Name屬性不可見,反射的是DemoB類中的Name屬性 /// </summary> public new string Name { get; set; } /// <summary> /// 由於DemoB類的Age屬性重寫了DemoA類的Age屬性,所以在DemoB類中調用DemoA類的DisplayProperties方法時,DemoA類的Age屬性不可見,反射的是DemoB類中的Age屬性 /// </summary> public override int Age { get; set; } } class Program { static void Main(string[] args) { DemoA demo = new DemoA();//構造DemoA類對象 demo.DisplayProperties();//通過DemoA類的對象調用DisplayProperties方法,反射DemoA類的所有屬性 demo = new DemoB();//構造DemoB類對象 demo.DisplayProperties();//通過DemoB類的對象調用DisplayProperties方法,反射DemoB類和DemoA類的所有屬性 Console.WriteLine("Press key to quit..."); Console.ReadKey(); } } }
執行上面的代碼,結果如下所示:
可以看到DemoA類的DisplayProperties方法,不光可以反射DemoA類的所有屬性成員,當DisplayProperties方法被DemoB類的對象調用時還可以反射DemoB類的所有屬性成員。