• 加载程序集 (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. cocos2d-x3.17 整体概述

    首先,cocos引擎有三个版本:C++,Lua,Js.其底层代码是由C++编写,通过脚本文件绑定到Lua与Js,所以我们之后解析的都是cocos2d-x.其次,cocos安装等就不概述了,百度一大堆. ...

  2. Verilog强制激励语法

    Verilog强制激励语法 1. 在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值. 过程连续赋值往往是不可以综合的,通常用在测试模块中. 两种方式都有各自配套的命令来停止赋值过程. ...

  3. windows的docker开始支持linux的镜像 ,Version 18.03.0-ce-win59 (16762)

    LCOW containers can now be run next to Windows containers.Use '--platform=linux' in Windows containe ...

  4. cin与cout格式化输出

    cin 中“<<”流 输入运算符 ----------------------------------------------------------------------------- ...

  5. 剑指Offer 11. 二进制中1的个数 (其他)

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目地址 https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040e ...

  6. 【转】spring boot mybatis 读取配置文件

    spring boot mybatis 配置整理 一.加载mybatis的配置 1.手写配置,写死在代码里 import java.io.IOException; import java.util.P ...

  7. git diff 与git format-patch 生成补丁包

    git diff commit_id 会生成最后一次提交到目前修改过的内容补丁 git diff commit_id1 commit_id2 会生成两次提交之间修改过的内容补丁 git format- ...

  8. [LeetCode&Python] Problem 504. Base 7

    Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...

  9. Java BigInterger类

    BigInteger概述 可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法 public BigInteger add(Bi ...

  10. [Java] Thread -- 避免Race Condition (Synchronized)

    public class TestRaceCondition implements Runnable{ public static int counter = 0; public static voi ...