博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET Core中基类可以反射子类的成员
阅读量:6993 次
发布时间:2019-06-27

本文共 2320 字,大约阅读时间需要 7 分钟。

我们定义一个类DemoA,再定义一个类DemoB继承DemoA。当构造一个DemoB类对象后,我们可以通过其调用基类DemoA中的方法来反射子类DemoB的成员。

新建一个.NET Core控制台项目,其代码如下:

using System;namespace RF{    ///     /// DemoA类为基类    ///     class DemoA    {        ///         /// 反射DemoA类及其子类的所有属性成员        ///         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();        }        ///         /// DemoA类的属性NumberA会被DisplayProperties方法所反射        ///         public int NumberA { get; set; }        ///         /// 由于DemoB类的Name属性隐藏了DemoA类的Name属性,所以在DemoB类中调用DemoA类的DisplayProperties方法时,DemoA类的Name属性不可见,反射的是DemoB类中的Name属性        ///         public string Name { get; set; }        ///         /// 由于DemoB类的Age属性重写了DemoA类的Age属性,所以在DemoB类中调用DemoA类的DisplayProperties方法时,DemoA类的Age属性不可见,反射的是DemoB类中的Age属性        ///         public virtual int Age { get; set; }    }    ///     /// DemoB类继承DemoA类,在DemoB类的对象上调用DemoA类的DisplayProperties方法时,也会反射DemoB类的所有属性    ///     class DemoB : DemoA    {        ///         /// DemoB类的属性NumberB也会被DisplayProperties方法所反射        ///         public int NumberB { get; set; }        ///         /// 由于DemoB类的Name属性隐藏了DemoA类的Name属性,所以在DemoB类中调用DemoA类的DisplayProperties方法时,DemoA类的Name属性不可见,反射的是DemoB类中的Name属性        ///         public new string Name { get; set; }        ///         /// 由于DemoB类的Age属性重写了DemoA类的Age属性,所以在DemoB类中调用DemoA类的DisplayProperties方法时,DemoA类的Age属性不可见,反射的是DemoB类中的Age属性        ///         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类的所有属性成员。

 

转载地址:http://embvl.baihongyu.com/

你可能感兴趣的文章
阿里天池大赛:最后一公里急速配送
查看>>
高效的 iOS 版本检测方法
查看>>
三级菜单的实现
查看>>
Hadoop的“Hello world”---WordCount
查看>>
JS删除数组里指定值的问题
查看>>
为什么需要云压力性能测试?
查看>>
[福利]如何下载Tumblr的视频
查看>>
Webpack--loaders
查看>>
Android 网络请求详解
查看>>
【mongoDB高级篇③】综合实战(1): 分析国家地震数据
查看>>
(译)基于 Promise 的JavaScript 电池新 API
查看>>
Centos 安装postgresql
查看>>
JavaFX 已从 JDK 中独立拆分,早期预览版开放下载
查看>>
如何应对服务器压力?服务器横向扩展(加机器)策略漫谈
查看>>
avalon js单页面滑动切换
查看>>
垃圾回收机制算法分析
查看>>
特斯拉史上最重要发布会?Elon Musk 交底全自动驾驶计划 ...
查看>>
Unity组件:Audio Chorus Filter PRO only 音频合声滤波器 ...
查看>>
Flutter MergeableMaterialItem
查看>>
开源监控利器Prometheus初探
查看>>