利用反射中的程序集类(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. JavaScript 变量屏蔽

    不同作用域中相同名称的变量就会触发变量屏蔽: { let x = {color:"blue"}; let y = x; let z = 3; { //重复定义x,所以对全局变量x进 ...

  2. js获取本机的网络IP地址

    JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...

  3. ssh框架中struts.xml 的配置参数详解

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  4. fitnesse - 框架介绍

    fitnesse - 框架介绍 2017-09-29 目录: 1 fitnesse是什么?2 框架介绍3 与junit.testng比较,fitnesse教其他框架有什么优势 1 fitnesse是什 ...

  5. NOIP2015 D2T3 洛谷2680 BZOJ4326 运输计划 解题报告

    前言:个人认为这是历年NOIP中比较简单的最后一题了,因此将自己的思路与大家分享. 题目大意: 给一棵无根树,给出m条路径.允许将树上的一条边的权值改为0.求m条路径长度最大值的最小值.n,m< ...

  6. .net core2.0半年的使用经验之前言

    目录 前言 使用dapper做数据层调用 使用T4模板生成 使用缓存 使用swagger做接口文档(非restful) 使用identity做身份认证 使用jwt做身份认证 使用CORS跨域 调用we ...

  7. 【.NetCore】基于jenkins以及gitlab的持续编译及发布

    前沿 其实本来是想把标题叫做持续集成的,只是后来看看研究出的内容,就只有发布这一个动作,自动化测试等内容也未涉及到,所以改名叫持续编译及发布应该更加贴切吧? 问题背景 其实目前我们传统方式上的发布方式 ...

  8. CXGrid TcxButtonEdit 信息获取 TcxButtonEditProperties取得TcxGridDBTableView

    ( TcxButtonEdit(Sender).ActiveProperties).Buttons[AButtonIndex].Hint;//取到按钮本身的属性IntToStr( ( TcxGridS ...

  9. sh, 批量执行Linux命令

    step 1:创建一个sh批处理命令文件 # vim /etc/batch_ssh/install_redis.sh step 2:给当前用户,能够执行sh脚本权限# chmod install_re ...

  10. MYSQL数据库学习十六 安全性机制

    16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...