.NET Core中基类可以反射子类的成员
我们定义一个类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类的所有属性成员。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2010-10-29 将程序集加入GAC,并让其能够在VS的添加引用的.NET选项卡中被引用
2009-10-29 接口和抽象类:Interface、abstract