C# 调用程序集方法
- 加载程序集 (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# 调用程序集方法的更多相关文章
- 反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)
反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性.字段),而不去使用Invoke方法) 创建Delegate (1).Delegate.CreateDelegate(Type, ...
- C#反射调用程序集类中方法
建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x ...
- SQL Server 调用 C# 方法实现正则表达式验证
Ø 前言 1. 在 SQL Server 中默认是不支持正则表达式验证的,如果需要某个字符串匹配一个正则表达式的验证规则,就需要额外的编写 C# 方法,并发布到 SQL Server 数据库中. ...
- 在SQL Server中使用CLR调用.NET方法
介绍 我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法.按照微软所述,通过宿主 Microsoft .NET Framework 2 ...
- C#实现简易ajax调用后台方法
在当前WEB当中,有些人都会抛弃asp.net的服务器控件,转而使用ajax来进行数据的交互和存储. 当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数, ...
- Android和JavaScript相互调用的方法
转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...
- .Net中的AOP系列之《间接调用——拦截方法》
返回<.Net中的AOP>系列学习总目录 本篇目录 方法拦截 PostSharp方法拦截 Castle DynamicProxy方法拦截 现实案例--数据事务 现实案例--线程 .Net线 ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
- OC中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...
随机推荐
- 自动化测试-5.python基本语法
# encoding=utf-8 import sys import time # 我想从键盘输入信息 name ='' #赋值为空 print name #输出空 name=raw_input(&q ...
- .net webapi跨域方法整理
方法一 在Web.Config里面加上了配置信息: <httpProtocol> <customHeaders> <add name="Access-Contr ...
- Eclipse 护眼背景色设置
链接地址:http://blog.chinaunix.net/uid-27183448-id-3509010.html 背景颜色推荐:色调:85,饱和度:123,亮度:205 文档都不再是刺眼的白底 ...
- 几种数据格式的处理 - Python
1. CSV数据 import csv csvfile = open('data_text.csv','rb') reader = csv.reader(csvfile) # 返回数据为列表类型 # ...
- 通过 ppa 在ubuntu server 上安装java 8
第一步:使用ppa/源方式安装,安装ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 第二步:安装 oracle ...
- c++ 快速读入输出
1. 读入优化 C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢? 其实,经过类似高精度的处理,就可以实现类型转换啦! 下面是正负数读入优化模板: #include ...
- .Net调用Java带验证的WebService解决方法
最近遇到了一个问题,需要通过验证用户名.密码去调用对方Java给出的WebService接口. 搜索了很多资料,没想到最终很简单就完了.... (捂脸 第一步:添加web引用 第二步:进行验证,并完成 ...
- https://blog.csdn.net/doegoo/article/details/50749817
因为使用DiscuzX3.2进行系统的整合后,因为只是想在原J2EE的系统上增加论坛功能,而且J2EE中已经有一套用户的注册认证的体系,所以不需要在Discuz的系统中去注册以及登录功能,而是通过在J ...
- Dart 学习资料
Dart 学习资料: 学习资料 网址 Dart 编程语言中文网 http://dart.goodev.org/ Dart 官方包仓库 https://pub.dartlang.org/ 你想了解的Da ...
- AES对称加密和解密(转)
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...