利用反射中的程序集类(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应用.的更多相关文章

  1. System.Collections空间下的Hashtable类与System.Collections.Specialized下的StringDictionary的一点小区别

    哎.有一周没有写自己的博客. 最近在做一个调用web服务的小程序,没有使用c#自动生成的代理类,而是使用http-get.post.以及soap的方式去请求的,使用这http请求这种方式需要自己去拼参 ...

  2. wpf多程序集之间共享资源字典--CLR名称空间未定义云云

    wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...

  3. 搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...

  4. python 之 面向对象基础(定义类、创建对象,名称空间)

    第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问 ...

  5. System.Reflection.Emit学习

    C#反射发出System.Reflection.Emit学习 分享: 1 一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于Syste ...

  6. [No000013F]WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  7. WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  8. C#反射发出System.Reflection.Emit学习

    一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集 ...

  9. 网络虚拟化基础一:linux名称空间Namespaces

    一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...

随机推荐

  1. postgresql搭建从库

    postgresql搭建从库 master  10.40.196.27 slave   10.40.55.69 需求:master和slave作为主从流复制,当master宕机后,slave切换为新主 ...

  2. ssh框架搭建出现的异常: class com.my.entity.user not found while looking for property: id

    在处理用户注册的时候,user实体的bean创建不出来,原代码如下: <class name="com.my.entity.User" table="user&qu ...

  3. 大数据量情况下高效比较两个list

    比如,对两个list<object>进行去重,合并操作时,一般的写法为两个for循环删掉一个list中重复的,然后再合并. 如果数据量在千条级别,这个速度还是比较快的.但如果数据量超过20 ...

  4. webpack4: compilation.mainTemplate.applyPluginsWaterfall is not a function 解决方法

    今天捣鼓webpack4踩到一个弥天大坑:使用html-webpack-plugin打包html的时候一直报 compilation.mainTemplate.applyPluginsWaterfal ...

  5. 使用MBROSTool 工具制作U盘多启动盘的方法总结

    前段时间写了一个自用五合一多启动盘分享--分别用来维护娱乐,wifi密码破解,win&mac登陆密码绕过/清除,反馈的同学还是挺多,觉得大家都有这方面的需求,于是再把自己的使用经验总结一下. ...

  6. python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...

  7. shiro授权

    一.shiro-permission.ini shiro-permission.ini里面的内容相当于在数据库 #用户 [users] #用户zhang的密码是123,此用户具有role1和role2 ...

  8. [Luogu 2642] 双子序列最大和

    Description 给定一个长度为n的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出最大和.一个连续子序列的和为该子序列中所有数之和.每个连续子序列的最小 ...

  9. RabbitMQ 消息确认与公平调度消费者

    一.消息确认 为了确保消息一定被消费者处理,rabbitMQ提供了消息确认功能,就是在消费者处理完任务之后,就给服务器一个回馈,服务器就会将该消息删除,如果消费者超时不回馈,那么服务器将就将该消息重新 ...

  10. Gitlab - Pull Request

    1.概述 今天查看Gmail,有网友私密我Gitlab的Pull Request工作流程,一直以为我写过这片博客,查看<Git和Gitlab协同工作>却发现遗漏了Pull Request这 ...