System.Reflection名称空间下的程序集类Assembly应用.
利用反射中的程序集类(Assembly--抽象类)动态加载类库(.dll)或者可执行程序(.exe).
优点:①.可以消除if条件的逻辑判断.②.减少内存资源.③.有利于程序扩展.
缺点...
使用静态方法LoadFrom()加载外部.dll实例.
//Assembly程序集中有三个加载程序集的方法(Load()、LoadFrom()和LoadFile()).
private void btnassembly_Click(object sender, EventArgs e)
{
// object instance = Assembly.LoadFrom(@"D:\c#demo\C#高级话题\myTestdll\bin\Debug\myTestdll.dll").CreateInstance("myTestdll.TestDLL");
Assembly am = Assembly.LoadFrom(@"D:\c#demo\C#高级话题\myTestdll\bin\Debug\myTestdll.dll");
Type type = am.GetType("myTestdll.TestDLL"); //绝对路径,即名称空间.类名.
//object obj = Activator.CreateInstance(type);//获取属性.
//MethodInfo GetValue = type.GetMethod("mGetValue"); //根据方法名获取MethodInfo对象 object instance = am.CreateInstance("myTestdll.TestDLL");//调用实例方法
//方法名称. 参数.
int sum = (int)type.InvokeMember("mGetValue", BindingFlags.Default | BindingFlags.InvokeMethod, null, instance, new object[] {, });//sum=5
}
DLL代码:
namespace myTestdll
{
public class TestDLL:myClass<int>
{
public override int mGetValue(int value1, int value2)
{
return value1 + value2;
}
} public abstract class myClass<T> where T : struct//约束T只能是值类型(int、decimal、double...).
{
public T _pvalue; public T PValue
{
get { return _pvalue; }
set { _pvalue = value; }
} public abstract T mGetValue(T value1,T value2); }
}
调用dll中封装的窗体:
1》新建类库项目--》添加窗体。
2》其他项目加载该dll:
//直接引用封装了窗体的dll来实例化是可以的。
//TCPServerDll_From dll_From = new TCPServerDll_From();
//dll_From.Show();
//反射调用dll中的窗体。
Assembly outerAsm = Assembly.LoadFrom(@"D:\C#Demo\tcp相关\TCPDemo\TCPServerDll\bin\Debug\TCPServerDll.dll");
Type outerForm = outerAsm.GetType("TCPServerDll.TCPServerDll_From", false);//找到指定窗口(格式:名称空间.类名)
if (outerForm != null)
{
Form dll_form = (Activator.CreateInstance(outerForm) as Form);
dll_form.MdiParent = this;
dll_form.Show();//转换成窗体类,显示
}
System.Reflection名称空间下的程序集类Assembly应用.的更多相关文章
- System.Collections空间下的Hashtable类与System.Collections.Specialized下的StringDictionary的一点小区别
哎.有一周没有写自己的博客. 最近在做一个调用web服务的小程序,没有使用c#自动生成的代理类,而是使用http-get.post.以及soap的方式去请求的,使用这http请求这种方式需要自己去拼参 ...
- wpf多程序集之间共享资源字典--CLR名称空间未定义云云
wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...
- 搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...
- python 之 面向对象基础(定义类、创建对象,名称空间)
第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问 ...
- System.Reflection.Emit学习
C#反射发出System.Reflection.Emit学习 分享: 1 一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于Syste ...
- [No000013F]WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- C#反射发出System.Reflection.Emit学习
一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集 ...
- 网络虚拟化基础一:linux名称空间Namespaces
一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...
随机推荐
- linux下tomcat 8的安装以及tomcat启动慢问题
今天在 linux 下安装了 tomcat,中间也是一路波折,最终安装好了.感觉应该有不少伙伴跟我一样都会踩到这些坑,打算记录下来.使用的是通用(ubantu,debian, centos 均可)的安 ...
- html2canvas不能识别svg的解决方案
最新有个功能需要截取网页成图片,于是用到比较流行的html2canvas,本来以为能顺顺利利的搞定,后来发现网页上的流程图连接线不在截图中.于是各种百度.bing,也搜到好多,但是感觉没有一个完整的代 ...
- WCF服务寄宿到IIS
一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的wind ...
- C语言编程之道--读书笔记
C语言语法 const int nListNum =sizeof(aPrimeList)/sizeof(unsigned);//计算素数表里元素的个数 1:#define INM_MAX 32767 ...
- Windows下python2.7安装64位mysqlclient
在使用python调用mysql数据库的时候,需要引入对应的数据包 import MySQLdb 如果提示找不到对应的包,说明还需要安装对应的mysql数据库客户端操作的python包.在python ...
- Zookeeper技术分享
内容整理自组内分享PPT 一.概述 ZooKeeper 遵循一个简单的客户端-服务器模型,其中客户端 是使用服务的节点(即机器),而服务器 是提供服务的节点.ZooKeeper 服务器的集合形成了一个 ...
- 在CentOS7中安装.Net Core2.0 SDK
1.sudo yum install libunwind libicu(安装libicu依赖) 2.curl -sSL -o dotnet.tar.gz https://go.microsoft.co ...
- 利用sfc文件构建网络渗透
收集哈希 SCF(Shell命令文件)文件可用于执行一组有限的操作,例如显示Windows桌面或打开Windows资源管理器,这并不是什么新鲜事.然而,一个SCF文件可以用来访问一个特定的UNC路 ...
- 走近webpack(5)--devtool及babel的使用
这一章咱们来说一下如何使用babel以及如何用webpack调试代码.这是基础篇的最后一章,这些文章只是罗列的给大家讲解了在一些场景中webpack怎样使用,这章结束后会给大家讲解一下如何在我们实际的 ...
- HTTP 0.9 HTTP 1.0 HTTP 1.1 HTTP 2.0区别
HTTP协议 :Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议.是互联网上应用 ...