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操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...
随机推荐
- Delphi子窗体随主窗体大小而变化
当然办法有很多种,我建议用TRzsplitter更好点, TRzsplitter分割,在其上边放置panel,然后把align置为alClient,则可以随着主窗体的大小而一起变动 选中此控件右键ed ...
- PHP随机函数-集锦
1 PHP随机函数收藏 function random_string($len = 6) { $chars = array( "a", "b", "c ...
- mysql整理
一.建表(创建一个简单的用户权限关系表) 1.user(用户表) CREATE TABLE `user` ( `username` ) NOT NULL, `password` ) DEFAULT N ...
- Spring Mobile——探测客户端设备和系统
Spring Mobile--探测客户端设备和系统 今天闲来无事,浏览Spring的官方网站,发现了Spring Mobile项目,之前也看到过,还以为是针对手机端的项目,并没有细看.今天仔细看了一下 ...
- Python基础-week03
本节内容摘要:http://www.cnblogs.com/Jame-mei 1.集合及其运算 2.文件读与写详解(1-3) 3.文件修改详解 作业:程序1: 实现简单的shell sed替换功能 ...
- jQuery 3.0最终版发布,十大新特性眼前一亮
jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终板 ...
- 使用kafka connect,将数据批量写到hdfs完整过程
版权声明:本文为博主原创文章,未经博主允许不得转载 本文是基于hadoop 2.7.1,以及kafka 0.11.0.0.kafka-connect是以单节点模式运行,即standalone. 首先, ...
- 二分查找(Java实现)
二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...
- [总结] O(n)求和为0的最长子段
以这题为例 Solution 我们首先用前缀和差分,可以认为G是1,R是-1,然后求一个前缀和qzh. 如果 qzh[i]==qzh[j] 那么 i~j 这一整段,一定是一个和为0的区间,即红绿相等的 ...
- JS面向对象与面向过程
前言 面向对象编程: 就是将你的需求抽象成一个对象,然后针对这个对象分析其特征(属性)与动作(方法)--这个对象就称之为类 面向过程编程: 特点:封装,就是将你需要的功能放在一个对象里面 ------ ...