如果没有看《C#反射(一)》、建议先看《C#反射(一)》再看这一篇。上一篇文章发表,有人评论我所写的东西比较基础。其实我也知道我也只不过是在写最基础的语法而已,之所以写它是因为自己学编程学了一两年之后才接触到反射,相信会有很多人跟我有过同样的经历。概其原因,书店里几乎90%的书籍都不谈反射。还有,曾经在百度、goole搜索过反射,但也很难找到自己喜欢的答案。希望我所写的东西能为那些初学编程的新手有所帮助。

我不想在这里过多的描述反射的概念。我还是用我自己觉得最简单、最直接的语言来描述反射——“反射就是一种机制,通过这种机制,我们能知道一些位知程序集的详细信息!”;通过上一篇我们已经学会如何得到一个未知程序集的相关信息,接下来我要讲的是如何知道未知程序模块的信息:

模块信息是通过Module类访问的。下面通过一个类子,讲解下Module类的使用,如果你是一个用心的程序员,应该了解下Module的详细信息。

还是继续使用C#反射(一)的类子。下面我们写一个新的文件ModuleDemo.cs。内容如下:

//编译命令 csc /r:Sport.dll ModuleDemo.cs

using System;

using System.Reflection;

public class ModuleDemo

{

public static void Main(string[] args)

{

//=======================

// Am Module object is obtained representing the

// SomeSports.dll library file

//=======================

Assembly assembly = Assembly.Load("SomeSports");

Module module = assembly.GetModule("SomeSports.dll");

//======================

//Search the module for the type named "Football"

Type[] types = module.FindTypes(Module.FilterTypeName,"Football");

if(types.Length != 0)

{

ConstructorInfo ci = types[0].GetConstructor(new Type[0]);

Sport sport = (Sport)ci.Invoke(new Object[0]);

Console.WriteLine(sport.GetName() + " has "+sport.GetDuration());

}

else

{

Console.WriteLine("type not found");

}

}

}

我们用csc /r:Sport.dll ModuleDemo.cs编译,然后用MouduleDemo运行程序就能看到如下输出:Football has four 15 minute quarters。

关于C#反射的基础知识,还有一个知识点就是访问未知对象的类型信息。在下一篇我将介绍它,并介绍我自己曾经写过的一个应用,可以实现具有相同属性或域名的不同类型对象之间的数据相互复制(在Java中可用于J2EE中POJO到Form Bean之间的数据复制)。

C#提高-------------------Module的使用的更多相关文章

  1. Webx示例-PetStore分析1

    1. 下载源码 2. 启动容器,加载组件--WebxContextLoaderListener WebxContextLoaderListener继承自org.springframework.web. ...

  2. C#提高-------------------Assembly和Module的使用-------反射内涵

    转 :C#反射技术概念作用和要点 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以 ...

  3. 如何提高ASP.NET页面载入速度的方法

    前言 本文是我对ASP.NET页面载入速度提高的一些做法,这些做法分为以下部分: 1.采用 HTTP Module 控制页面的生命周期. 2.自定义Response.Filter得到输出流stream ...

  4. 如何对SharePoint网站进行预热(warmup)以提高响应速度

    问题描述 SharePoint Server是一个易于使用的协作平台,目前在越来越多的企业中被应用开来.SharePoint Server是通过网站的形式向最终用户提供服务的,而这个网站是基于ASP. ...

  5. ASP.NET页面优化,提高载入速度[转]

      ASP.NET页面载入速度提高的一些做法: 1.采用 HTTP Module 控制页面的生命周期. 2.自定义Response.Filter得到输出流stream生成动态页面的静态内容(磁盘缓存) ...

  6. Maven提高篇系列之(一)——多模块 vs 继承

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  7. 提高 Discuz 门户文章被百度收录的方法

    如果你了解 SEO,你就该清楚使用 canonical URL 标签可以固定网页标准地址,可以提高网页的权重,有利于搜索引擎收录. 例如我的网站拥有两个子域名www.bbseat.com.cn和bbs ...

  8. nginx upload module的使用

    现在的网站,总会有一点与用户交互的功能,例如允许用户上传头像,上传照片,上传附件这类的.PHP写的程序,对于上传文件效率不是很高.幸好,nginx有一个名为upload的module可以解决这个问题. ...

  9. 提高Delphi的编译速度(bpl和bcp)

    delphi的编译速度提高(一) 此博文为原创,转载请注明出处 作者 :二娃 此博文的内容我曾经回答群内和论坛内的网友提问时回答过,现在写第一部分,第二部分,我再给出一个终极的提高速度的方法 我用过d ...

随机推荐

  1. Mac安装mtr与brow安装

    Mac安装mtr与brow安装 Mac里比较好的安装mtr方式是用Homebrew 或者MacPorts,本来想安装Homebrew,但大概是GFW的问题,下载地址无法访问,因为没有全局FQ,暂时不考 ...

  2. 9个绚丽多彩的HTML5进度条动画赏析

    进度条在网页应用中越来越广泛了,特别是现在的页面异步局部刷新时代,进度条可以让用户更好的等待操作结果.本文要分享9款绚丽多彩的HTML5进度条动画,有很多还是挺实用的,效果也非常不错. 1.CSS3发 ...

  3. LeetCode: Reverse Integer 解题报告

    Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, retur ...

  4. LeetCode: Insertion Sort List 解题报告

    Insertion Sort List Sort a linked list using insertion sort. SOLUTION: 使用一个dummynode 创建一个新的链,将旧的节点插入 ...

  5. 通过python-libvirt管理KVM虚拟机 代码实现

    初步代码 <span style="font-size:18px;">''''' Work with virtual machines managed by libvi ...

  6. axublog 1.05代码审计

    00x1 安装漏洞 install/cmsconfig.php function step4(){ $root=$_POST["root"]; $dbuser=$_POST[&qu ...

  7. RedHat 6 yum 使用网易源

    . . . . . 刚装好了 RedHat 6 系统,但是使用 yum 的时候总是提示 nothing to do,并且什么都做不了.后来经过一番搜索才知道,红帽的 yum 在线更新是收费的,而且必须 ...

  8. Spark Streaming 执行流程

    Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流. 本节描述了Spark Strea ...

  9. [Linux]阿里云免费试用体验(在阿里云的ubuntu上部署个人服务)

    作为一个IT界的人,一般都希望有一个独立的博客,或者一部独立的机器.所以我一直在找机会,拥有一台自己可以独立控制的机器,自己想干嘛干嘛.当然这在虚拟机或者自己的PC上面也可以实现,但是这跟一台一直开着 ...

  10. 【微信小程序】使用setTimeout制作定时器的思路

    setTimeout(func, time)可以使得每隔time毫秒就执行一次func函数,常用来做计时器/时钟. 下面是在微信小程序中的使用思路,只截取了关键部分代码. var timer; // ...