首页 > 其他分享 >反射

反射

时间:2023-09-02 09:15:00浏览次数:21  
标签:反射 rlist 程序 获取 类型 属性

反射

简介:

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。

程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。

您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

优点
  • 1、反射提高了程序的灵活性和扩展性。
  • 2、降低耦合性,提高自适应能力。
  • 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点
  • 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  • 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。
使用背景

就拿我遇到的问题举例,在我们遇到前台高级查询需要绑定多个重复下拉框时,我们总不会一个一个的获取值赋值吧,毕竟那么多重复数据,只填数据都需要花费大量时间,和重复工作,这个时候,就可以用到我们的反射。

思路:首先我们可以获取要绑定的属性字段名称,和它相对应的自定义属性名称,在这里自定义属性名称是需要提前配置好,下面我会讲,然后有了这两个属性还不行,如果你涉及到有多种形式的控件,比如文本框、下拉框、日期框,那我们就需要把它的类型也获取到,具体实现看下面代码。
实体:
        /// <summary>
        /// 客户编号
        /// </summary>
        [DisplayName("客户编号")]
        [SugarColumn(IsPrimaryKey =true)]
        public string? Client_Id { get; set; }
        /// <summary>
        /// 客户名称
        /// </summary>
        [DisplayName("客户名称")]
        public string? Client_Name { get; set; }

在这里DisplayName可以给字段设置别名,也就是前台你需要显示的这个字段对应名称。

方法:   
        public IActionResult GetClictShow()
        {
             //实例化要获取的类
            List<StatsDto> list = new List<StatsDto>();
               
            //获取类的属性信息,返回ClientTable公共属性的 Type 对象数组
            var ster = typeof(ClientTable).GetProperties();

            //遍历属性信息
            foreach (var item in ster)
            {
                StatsDto rlist = new StatsDto();
    
                //获取字段属性名
                rlist.label = item.Name;

                //获取属性自定义别名
                rlist.values = item.GetCustomAttribute<DisplayNameAttribute>().DisplayName;
               
                //获取当前字段属性类型
                rlist.types = item.PropertyType.ToString().ToLower().Split(".")[1];

                list.Add(rlist);
            }   
            return Ok(list);
        }
 //输出结果:
[
  {
   label:Client_Id,
   value:客户编号,
   types:int32,
  },
  {
   label:Client_Name,
   value:客户名称,
   types:string,
  },
]

标签:反射,rlist,程序,获取,类型,属性
From: https://www.cnblogs.com/Iflifecouldctrlz/p/17673175.html

相关文章

  • 反射和动态代理
    反射允许对成员变量,成员方法和构造方法的信息进行编程访问。1、获取Class对象(字节码文件对象)的三种方式①、Class.forName(“全类名”)(在源代码阶段使用)②、类名.class (在加载阶段中使用)③、对象.getClass() (在运行阶段使用)publicclassTest{publicstat......
  • 25. 反射
    一、什么是反射  反射,本质上就是通过字符的形式去操作对象/模块中的成员。在Python中,我们可以通过三个内置函数去实现反射相关的功能。getattr(object,name)#获取对象中的成员setattr(object,name,value)#设置对象中的成员hasattr(object,......
  • Java的反射机制
    JAVA反射机制:程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection(反射机制)。概述:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对......
  • 反射
    Java的反射是指在运行时动态地获取类的信息、调用对象的方法和访问对象的属性。通过反射,可以在编译时不知道具体类的情况下,动态地创建对象、调用方法和访问属性。Java反射的核心是java.lang.reflect包中的类和接口。以下是一些常用的反射类和方法的详解:Class类:java.lang.Class......
  • C# 反射
    ​反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据。元数据是存储在PE文件中的数据块,它详细记录了程序集或模块内部的结构、引用的类型和程序集和清单一、加载dll,读取相关信息//加载程序集Assemblyassembly=Assem......
  • 通过matlab模拟光线在三维空间中的传播路径并根据反射点进行三维空间建模
    1.算法理论概述      光线在三维空间中的传播路径涉及到光学、几何学等多个领域,是计算机图形学和计算机视觉等领域中的重要问题之一。本文将从专业角度详细介绍模拟光线在三维空间中的传播路径,包括多次反射情况,包括实现步骤和数学公式的详细介绍。 一、概述     ......
  • java高频面试题(反射、对象拷贝)
    java高频面试题(反射、对象拷贝)什么是反射?反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个......
  • 路由反射器
    在使用BGP路由协议的网络中,为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2.当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。路由反射器的定义利用路由反射可以解决这一问题。在......
  • BGP联盟和路由反射器
    在谈BGP联盟和BGP反射器这两个技术前,我们先来了解一下BGP中存在的路由黑洞问题。什么是路由黑洞呢?我们以下面这个拓扑来详细的介绍一下:这是一个典型的BGP应用组网。图中,有3个AS,AS之间运行BGP协议。AS65008域内运行OSPF协议。R1和R5上只运行BGP协议,R2和R4上运行OSPF和BGP协议,R3......
  • java的反射到底是有什么用处?怎么用?
    首先,明白静态语言与动态语言的区别Java是一门静态语言,但是反射提供了一种黑魔法,允许在运行时去动态修改一个类的定义,一个对象的属性等等,给静态语言加上了“动态”的效果Java反射可以简单的理解为Class的一种抽象,我们知道,Java是面向对象语言,一切皆对象,都是某种抽象,可以理解反射就是......