zoukankan      html  css  js  c++  java
  • 反射实践积累

    背景

    在一个服务实现内,有很多结构相似,略微不同的函数。

    Martin大师的谆谆告诫我们,可以使用Extract Method的方式进行重构。

     

    本次练习的内容主要是使用反射。

    以零散知识点的形式记录每一天的工作。

    内容

    1. 获取Type

    一般有两种方式获取类型:

    1.1 typeof方式

    var entityType = typeof(T);
    
    typeof(DataRow);

    1.2 Type.GetType()方法

    var daoType = dao.GetType();

    2.构造函数ConstructorInfo

    用ConstructorInfo表示构造函数;

    通过Type.GetConstructor()来获得;

    如:获取有一个参数为DataRow类型的构造函数

    entityType.GetConstructor(new Type[] { typeof(DataRow) });

    3.方法信息MethodInfo

    用MethodInfo表示函数信息;

    通过Type.GetMethod ()来获得;

    如:获取有一个名称为Get,且指定了特性参数类型的函数

    var daoGetMethodInfo = daoType.GetMethod("Get", GetDaoGetMethodParameterTypes(exprBpk).ToArray());

    4.属性PropertyInfo

    这个是最常用的,就不多说了,如:

    entityType.GetProperty(memberName);

    5.表达式Expression

    另外,使用Expression<Func<T,object>> 传递参数,好处就是可以获得所有信息——代码即数据

    如:expr = zw=>zw.StaffCode

    var memberName = (expr.Body as MemberExpression).Member.Name; //表示StaffCode
    
    var memberExprType = (expr.Body as MemberExpression).Type; //表示StaffCode的类型,为String

    反射积累实践:

    枚举类型的成员

    实例化新对象

    执行对象的成员

    查找类型的信息

    查找程序集的信息

    检查应用于某种类型的自定义特性

    创建和编译新程序集 

    每天进步一点点~~~

  • 相关阅读:
    elementui form 相关表单验证
    函数注释备注
    elementui elform 某一值为数组,各项必填验证
    selenium等待的三种方式(详细)
    什么是python
    pytest基础
    pymysql数据库操作
    自动化测试1
    allure生成测试报告
    python读取excel的文件
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3808719.html
Copyright © 2011-2022 走看看