• 加载程序集 (Assembly类)

使用 Assembly 类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例

    // 加载该路径的程序集
    Assembly ass = Assembly.LoadFrom(@"C:\Users\肖黎望\Desktop\net练习\ConsoleApplication1\Animal\bin\Debug\Animal.dll");
  • 获得该程序集内所有文件的 Type (Type类),通过Type对象可以获得类的信息(类名、命名空间、方法、属性....)

反射的核心类-Type,封装了关于类型的元数据,是进行反射的入口。当获得了类型的Type对象后,可以根据Type提供的书信和方法获得这个类型的一切信息,包括字段,属性,事件,参数,构造函数等

            //GetTypes 获得该程序集下所有类的Type
Type[] tps = ass.GetTypes();
//获得所有公共类型
Type[] tps = ass.GetExportedTypes();
//通过指定类名获取该类的 Type foreach (Type tp in tps)
{
//命名空间.类名
Console.WriteLine(tp.FullName);
//类名
Console.WriteLine(tp.Name);
//所有方法的信息 数组
MethodInfo[] meths = tp.GetMethods();
//MethodInfo 保存方法的所有信息
foreach (MethodInfo meth in meths)
{
//获得方法名
Console.WriteLine(meth.Name);
}
}

我们来看一下Type给我们提供的一些方法:

            Type cat_type = ass.GetType("Animal.Cat");
Type animal_type = ass.GetType("Animal.Animal"); //IsAssignableFrom 判断 animal_type 是不是 cat_type 的父类
animal_type.IsAssignableFrom(cat_type); //返回 TRUE //IsSubclassOf 判断是不是 animal_type 的子类
cat_type.IsSubclassOf(animal_type); //返回TRUE Object obj = Activator.CreateInstance(cat_type);
//IsInstanceOfType 判断obj是不是cat_type 的对象
cat_type.IsInstanceOfType(obj); //返回TRUE
//判断obj是不是animal_type 的对象
animal_type.IsInstanceOfType(obj); //返回TRUE
  • 创建对象(Activator类)
        object obj = Activator.CreateInstance(cat_type);
  • 调用方法
            Type cat_type = ass.GetType("Animal.Cat");

            //创建对象
object obj = Activator.CreateInstance(cat_type);
//获取属性
PropertyInfo prop = cat_type.GetProperty("Food");
//设置属性
prop.SetValue(obj, "鱼");
//获取方法
MethodInfo meth = cat_type.GetMethod("eat");
//设置参数,如果没有设置 null,调用方法
meth.Invoke(obj,null);

C# 调用程序集方法的更多相关文章

  1. 反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)

    反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性.字段),而不去使用Invoke方法)   创建Delegate (1).Delegate.CreateDelegate(Type, ...

  2. C#反射调用程序集类中方法

    建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x ...

  3. SQL Server 调用 C# 方法实现正则表达式验证

    Ø  前言 1.   在 SQL Server 中默认是不支持正则表达式验证的,如果需要某个字符串匹配一个正则表达式的验证规则,就需要额外的编写 C# 方法,并发布到 SQL Server 数据库中. ...

  4. 在SQL Server中使用CLR调用.NET方法

    介绍    我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法.按照微软所述,通过宿主 Microsoft .NET Framework 2 ...

  5. C#实现简易ajax调用后台方法

    在当前WEB当中,有些人都会抛弃asp.net的服务器控件,转而使用ajax来进行数据的交互和存储. 当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数, ...

  6. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  7. .Net中的AOP系列之《间接调用——拦截方法》

    返回<.Net中的AOP>系列学习总目录 本篇目录 方法拦截 PostSharp方法拦截 Castle DynamicProxy方法拦截 现实案例--数据事务 现实案例--线程 .Net线 ...

  8. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

  9. OC中加载html5调用html方法和修改HTML5内容

    1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...

随机推荐

  1. springboot源码之(bean的递归注册)

    在prepareContext中,用loader调用load方法,loader是 BeanDefinitionLoader,在BeanDefinitionLoader的构造方法中,会实例化一个Anno ...

  2. JS查看IOS手机的版本号

    微信弹portal连接wifi的开发过程中,遇到了有些版本的ios系统在弹portal的浏览器(以下称小浏览器)中无法进行alert(),weixin://等等操作,只能使用window.locati ...

  3. Windows10 VS2017 C++ xml解析(tinyxml2库)

    首先下载tinyxml2 7.0.1库: https://github.com/leethomason/tinyxml2/releases 打开tinyxml2,然后升级sdk,解决方案->重定 ...

  4. iOS 添加第三方字体

    有时候根据UI的设计,我们需要添加第三方字体到工程中,实现特殊的效果. 一,把第三方字体包导入工程 二,在info.plist文件中添加Fonts provided by application 类型 ...

  5. google Kickstart Round G 2017 三道题题解

    A题:给定A,N,P,计算A的N!次幂对P取模的结果. 数据范围: T次测试,1 ≤ T ≤ 100 1<=A,N,P<=105 快速幂一下就好了.O(nlogn). AC代码: #inc ...

  6. apk签名的流程

    最后总结一下apk签名的整个流程: 一.对Apk中的每个文件做一次算法(数据SHA1摘要+Base64编码),保存到MANIFEST.MF文件中 二.对MANIFEST.MF整个文件做一次算法(数据S ...

  7. Git源码安装 Linux指定安装目录

    1.安装依赖包 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 2.下载最新版源码包https: ...

  8. c语言笔记4数据的输入和输出

    数据的输入和输出 知识点一 计算机的用途:数据的输入和输出. 分类: 字符:字符输入函数getchar().字符输出函数putchar(). 格式:格式输入函数scanf().格式输出函数printf ...

  9. Java高级特性 第5节 序列化和、反射机制

    一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...

  10. 18.4 #if 0…endif的用途

    #if  0  ...   #endif的作用跟/*...*/的作用是一样的,就是注释! 可是为什么不用注释符号/*? 答:为了解决嵌套注释.如下: #include“stdio.h” int mai ...