我们定义一个类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类的所有属性成员。

最新文章

  1. [BZOJ1106][POI2007] Tet 立方体大作战
  2. [转]maven安装以及eclipse配置maven
  3. 【BZOJ1001】【BeiJing2006】狼抓兔子 最大流
  4. iOS 学习资料整理
  5. NetHogs下载和监控
  6. [置顶] Ubuntu 12.04以上如何恢复GNOME传统界面
  7. Pawn Brotherhood
  8. TCP三四次握手
  9. uboot之位置无关代码解析
  10. hdu 5885 FFT
  11. Django 中间件版登录验证
  12. mybatis自动生成mapper和pojo
  13. 禁止tomcat生成catalina.out、localhost_access_log、host-manager.log、localhost.log、manager.log这些文件
  14. rsync 通过服务的方式同步 linux系统日志 screen工具
  15. C#常用数据加密类
  16. 使用LINQ获取List列表中的某个字段值
  17. 【js】 Uncaught RangeError: Invalid string length
  18. pyqt加载图片
  19. /proc/interrupts 和 /proc/stat 查看中断的情况
  20. 基于easyUI实现系统日志管理

热门文章

  1. C# 圆角button
  2. OpenStack IceHouse 部署 - 1 - 架构说明
  3. Maven学习总结(四):更改maven的编码格式方式
  4. 【Android】利用回收机制创建ListView列表实现
  5. bootstrap学习笔记(菜单.按钮)
  6. Android学习笔记(2)----LocationManager的使用
  7. 移动端App开发 - 01 - 开篇
  8. d3js enter/exit深入了解
  9. Git小抄
  10. Retrieving failed records after an SqlBulkCopy exception