【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

06-02 1497阅读

欢迎来到《小5讲堂》

这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

目录

  • 小背景
  • 已知实体类名
  • 动态实体类名
  • 反射概念
  • 相关文章

    小背景

    最近在做一个项目,用比较简单粗暴的开发方式,可以认为是敏捷开发,

    没有使用现有成熟的多层架构和工厂模式等高大上的技术。

    因此,稍微会接触到一些相对底层的东西,或者需要封装的一些方法,

    那么实体类的动态反射就派上用场了。

    已知实体类名

    定义实体类结构如下

    public class StudentModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public decimal Score { get; set; }
        public DateTime AddTime { get; set; }
        public bool IsOk { get; set; }
    }
    

    反射方式一:直接获取类型

     StudentModel studentModel = new StudentModel()
     {
         Name = "张三",
         Age = 23,
         Score = 93.90m,
         AddTime = DateTime.Now,
         IsOk = true
     };
     Type type = typeof(StudentModel);
     PropertyInfo[] proArr1 = type.GetProperties();
     foreach (PropertyInfo pi in proArr1)
     {
         string dataType = pi.PropertyType.Name;
         string key = pi.Name;
         string value = $"{pi.GetValue(studentModel, null)}";
     }
    

    【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

    反射方式二:先实例化再获取类型

     StudentModel studentModel = new StudentModel()
     {
         Name = "张三",
         Age = 23,
         Score = 93.90m,
         AddTime = DateTime.Now,
         IsOk = true
     };
    StudentModel model = new StudentModel();
    Type type2 = model.GetType();
    PropertyInfo[] proArr2 = type2.GetProperties();
    foreach (PropertyInfo pi in proArr2)
    {
        string dataType = pi.PropertyType.Name;
        string key = pi.Name;
        string value = $"{pi.GetValue(studentModel, null)}";
    }
    

    【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

    动态实体类名

    上面是通过已经类名和实例化类进行反射。

    如果封装一个方法,方法内进行动态T实体类进行反射,那么又是如何做呢?

    封装方法,代码如下:

    public void Get(T studentModel) where T : class, new()
    {
        Type type = typeof(T);
        PropertyInfo[] proArr1 = type.GetProperties();
        foreach (PropertyInfo pi in proArr1)
        {
            string dataType = pi.PropertyType.Name;
            string key = pi.Name;
            string value = $"{pi.GetValue(studentModel, null)}";
        }
        T model = new T();
        Type type2 = model.GetType();
        PropertyInfo[] proArr2 = type2.GetProperties();
        foreach (PropertyInfo pi in proArr2)
        {
            string dataType = pi.PropertyType.Name;
            string key = pi.Name;
            string value = $"{pi.GetValue(studentModel, null)}";
        }
    }
    

    调用代码:

     StudentModel studentModel = new StudentModel()
     {
         Name = "张三",
         Age = 23,
         Score = 93.90m,
         AddTime = DateTime.Now,
         IsOk = true
     };
     Get(studentModel);
    

    效果:【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

    总结下,动态反射,实际上就是和已知实体类一样,只不过是在封装方法里加了一个T表示可进行任意实体类的反射

    反射概念

    反射(Reflection)是C#中的一种强大技术,它允许程序在运行时检查和修改自身的类型信息。通过反射,您可以获取类的类型、字段、属性和方法等详细信息,并在运行时动态调用它们。

    反射的主要作用包括:

    1.类型检查:您可以使用反射来检查一个对象是否实现了某个接口或继承了某个类。

    2.动态调用:通过反射,您可以动态地调用方法,即使该方法在编译时并未被调用。

    3.属性访问:反射允许您获取和设置对象的属性值,即使这些属性在编译时并未被访问。

    4.类型转换:在某些情况下,您可能需要将对象转换为不同的类型,反射可以帮助您实现这种转换。

    相关文章

    【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

    【C#】使用vue3的axios发起get和post请求.net framework部署的API显示跨域

    【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

    【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

    【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

    【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法

    【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

    【C#】 SortedDictionary,查找字典中是否存在给定的关键字

    【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

    【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

    【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

    【C#】约瑟夫原理举例2个代码实现

    【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

    【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

    温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码