C#反射获取程序集信息和通过类名创建类实例 。

System.Reflection 命名空间:包含通过检查托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。

Assembly 类:表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行库应用程序构造块。

1、反射获取程序集信息

1.1 创建AssemblyResult.cs类,用于保存结果

/// <summary>
/// 反射结果类
/// </summary>
public class AssemblyResult
{/// <summary>/// 程序集名称/// </summary>public List<string> AssemblyName { get; set; }/// <summary>/// 类名/// </summary>public List<string> ClassName { get; set; }/// <summary>/// 类的属性/// </summary>public List<string> Properties { get; set; }/// <summary>/// 类的方法/// </summary>public List<string> Methods { get; set; }
}

1.2 创建AssemblyHandler.cs反射处理类

注意:要引用System.Reflection 命名空间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;namespace MyStudyFrom
{/// <summary>/// 反射处理类/// </summary>public class AssemblyHandler{string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/MyDLL/";/// <summary>/// 获取程序集名称列表/// </summary>public AssemblyResult GetAssemblyName(){AssemblyResult result = new AssemblyResult();string[] dicFileName = Directory.GetFileSystemEntries(path);if(dicFileName!=null){List<string> assemblyList = new List<string>();foreach(string name in dicFileName){assemblyList.Add(name.Substring(name.LastIndexOf('/') + 1));}result.AssemblyName = assemblyList;}return result;}/// <summary>/// 获取程序集中的类名称/// </summary>/// <param name="assemblyName">程序集</param>public AssemblyResult GetClassName(string assemblyName){AssemblyResult result = new AssemblyResult();if (!String.IsNullOrEmpty(assemblyName)){assemblyName = path + assemblyName;Assembly assembly = Assembly.LoadFrom(assemblyName);Type[] ts = assembly.GetTypes();List<string> classList = new List<string>();foreach (Type t in ts){//classList.Add(t.Name);classList.Add(t.FullName);}result.ClassName = classList;}return result;}/// <summary>/// 获取类的属性、方法/// </summary>/// <param name="assemblyName">程序集</param>/// <param name="className">类名</param>public AssemblyResult GetClassInfo(string assemblyName, string className){AssemblyResult result = new AssemblyResult();if (!String.IsNullOrEmpty(assemblyName) && !String.IsNullOrEmpty(className)){assemblyName = path + assemblyName;Assembly assembly = Assembly.LoadFrom(assemblyName);Type type = assembly.GetType(className,true,true);if (type != null){//类的属性List<string> propertieList = new List<string>();PropertyInfo[] propertyinfo = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);foreach (PropertyInfo p in propertyinfo){propertieList.Add(p.ToString());}result.Properties = propertieList;//类的方法List<string> methods = new List<string>();MethodInfo[] methodInfos = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);foreach (MethodInfo mi in methodInfos){methods.Add(mi.Name);//方法的参数//foreach (ParameterInfo p in mi.GetParameters())//{//}//方法的返回值//string returnParameter = mi.ReturnParameter.ToString();}result.Methods = methods;}}return result;}}
}

2、通过类名创建类实例

2.1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): 
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) 
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例

2.2、若要反射当前项目中的类可以为:

Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集 
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换

2.3、也可以为:

Type type = Type.GetType("类的完全限定名"); 
object obj = type.Assembly.CreateInstance(type);

======================================================= 
补充:
1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。
2)反射功能十分强大,没有什么不能实现的。若实现“跨程序集”,请使用第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。
--------------------- 
作者:pan_junbiao 
来源:CSDN 
原文:https://blog.csdn.net/pan_junbiao/article/details/12236419 
版权声明:本文为博主原创文章,转载请附上博文链接!

【转载】C#反射 获取程序集信息和通过类名创建类实例(转载)相关推荐

  1. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  2. C# 反射 通过类名创建类实例

    "反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用 ...

  3. java反射获取泛型_如何通过Java反射获取泛型类型信息

    前言 关于Java泛型,很多人都有一个误解,认为Java代码在编译时会擦除泛型的类型,从而在运行时导致没法访问其类型,这其实并不完全正确,因为有一部分泛型信息是可以在运行时动态获取的,这部分信息基本能 ...

  4. delphi Mercadopago阿根廷支付(支持获取账户信息和余额、创建商店,商店查询、创建二维码、二维码查询、创建订单、订单查询、订单退款)

    下载链接:https://download.csdn.net/download/liushenglin123/11435379 [delphi Mercadopago阿根廷支付]支持获取账户信息和余额 ...

  5. 道一云与畅捷通T+对接集成获取报销信息列表连通凭证创建(报销交通费(青海))

    道一云与畅捷通T+对接集成获取报销信息列表连通凭证创建(报销交通费(青海)) 接通系统:道一云 在道一云坚实的技术基础上,道一云推出全新升级的2.0产品矩阵,分别是低码平台.智能门户.场景应用.基于云 ...

  6. 1.9 通过反射获取注解信息

    使用注解修饰了类.方法.变量等成员之后,这些注解不会自己生效,必须由开发者提供相应的工具来提取处理.要想获取类.方法或变量的注解信息,必须通过 Java 的反射技术来获取 Annotation 对象, ...

  7. Java-使用反射获取类型信息

    2019独角兽企业重金招聘Python工程师标准>>> 一个简单类的例子 在这个类中,有普通的String类型,有数组类型,有带泛型的List类型,有嵌套List类型,以及有多个泛型 ...

  8. CocosCreator之KUOKUO带你搞反射-获取电池信息

    摘要 在使用 CocosCreator 打包的原生应用中,我们可以通过引擎封装好的反射机制调用 Java 的静态方法,从而实现提示.相册.支付跳转等功能.本次内容为利用 jsb 读取返回的电池信息. ...

  9. Java 反射 ---- 获取方法信息

    这一章我们通过Java的反射获取某个类的全部信息,话不多说直接上代码. 先贴工具类获取类信息的方法: package com.wangjd;import java.lang.reflect.Metho ...

  10. 道一云与畅捷通T+对接集成获取报销信息列表=>凭证创建

    正在上传-重新上传取消 数据源平台:道一云 在道一云坚实的技术基础上,道一云推出全新升级的2.0产品矩阵,分别是低码平台.智能门户.场景应用.基于云原生底座,为企业提供集智能门户解决网关流量问题.企业 ...

最新文章

  1. Python统计学-006:描述统计-方差
  2. 时空大数据可视化表达分析,看MapGIS七大“超能力”
  3. (搬运工)macbook安装kali
  4. Java中关于枚举的7种用法
  5. 啪啪三国2获取服务器信息,啪啪三国2怎么快速的获得资源?
  6. 我对if(!this.IsPostBack)的理解
  7. 【Android笔记】Unable to execute dex: Multiple dex files define 解决方法
  8. win2003下APACHE2.050+PHP5+MYSQL4.0.20+PHPMYADMIN2.57 的简易安装配置
  9. Android IOS WebRTC 音视频开发总结(二二)-- 多人视频架构模式
  10. 一道九宫格算法面试题
  11. 如何免费设置QQ空间背景音乐
  12. 【Unity3D开发小游戏】《文字冒险游戏》Unity开发教程
  13. GeForce Experience 安装时乱码解决
  14. 错误提示Incompatible file format错误原因和解决方案
  15. c 语言查询条件并列怎么用,关于C# if语句中并列条件的执行
  16. R语言dbplyr包实现R与SQL语句无缝衔接
  17. 数据标准化——scikit-learn
  18. css背景渐变(灰色渐变背景)
  19. 中职计算机应用专业课堂教学,新时期中职计算机专业课堂教学的创新应用
  20. 《nodejs+gulp+webpack基础实战篇》课程笔记(六)--附加课

热门文章

  1. 【图像配准】基于matlab GUI互相关图像配准【含Matlab源码 853期】
  2. 【电路仿真】基于matlab Simulink光伏太阳能电池板仿真模型【含Matlab源码 771期】
  3. 【人脸识别】基于matlab GUI灰度化教室人数统计【含Matlab源码 602期】
  4. 一年成为ai算法工程师_我作为一名数据科学研究员所学到的东西在一年内成为了AI领导者...
  5. cmd命令将web项目打成jar包_首发!JDK14之jpackage命令尝鲜
  6. 生成.pkl文件,读取.pkl文件的内容
  7. 无线网络 设置网关和服务器,我家的网络连接的IP是 192.168.1.223 我想问网关是多少 服务器是...
  8. python所有组合,在python中组合n个列表的所有元素
  9. linux如何搜全部文件含有字符串,Linux下查找目录中全部文件中含有某个字符串,而且只打印出文件名...
  10. python logisticregression_Python机器学习sklearn LogisticRegression用户流失预测模型初探