如果没有看《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 != )

    {

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

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

       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#反射(二) 【转】的更多相关文章

  1. java反射(二)--反射应用案例

    一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义--反射实例化对象:获取Class ...

  2. C#反射(二)

    长时间没有回顾反射知识了,今天就讲解一下反射的一般第二个用法. 二.对方法,属性等的反射 首先需要写一个测试类,生成.exe或.dll文件. class Test {   public Test()/ ...

  3. 深入分析Java反射(二)-数组和枚举

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  4. JAVA中反射机制二

    声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射二 利用反射创建对象 1.利用反射创建对象,首先我们创建一个类,类里面,我们知道构造函数有默认的构造函 ...

  5. C# 反射之调用方法谈

    反射的定义 反射提供了描述程序集.模块和类型的对象(Type 类型). 可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性. 如果代码中使用了特性 ...

  6. java反射快速入门(一)

    本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法 ...

  7. 反射(4)反射性能问题:直接调用vs反射调用

    很多人都说使用反射会有性能问题,那到底会比直接调用慢多少呢,下面就来测试一下. 直接调用vs反射调用 下面就来写个demo来验证下直接调用和反射调用的性能差异,代码如下: namespace Cons ...

  8. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  9. Java反射Reflect的使用详解

    目录 一. 什么是反射 二. 反射的基础Class 2.1 Class类概述 2.2 Class类对象获取的三种方式 三. 反射-构造函数 3.1 getDeclaredConstructor(Cla ...

随机推荐

  1. WPF combobox 圆角制作

    修改ComboBox的Template, 在VS 2010或者Blend中你可以导出ComboBox的默认模板: VS2010中: 然后修改里面的模板,比如: <Window x:Class=& ...

  2. chrome 全屏无法退出

    起因:chrome 按F11 全屏后,再按F11 死活无法退出全屏,关掉后,再打开chrome,自动全屏,F11无法退出全屏 系统:centos 6.3 解决:找到 chrome的用户数据存储目录,( ...

  3. IO负载高的来源定位 IO系列

    http://elf8848.iteye.com/category/281637 前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到 ...

  4. DTrace to Troubleshoot Java Native Memory Problems

    How to Use DTrace to Troubleshoot Java Native Memory Problems on Oracle Solaris 11 Hands-On Labs of ...

  5. WCF - 学习总目录

    WCF - 基础 WCF - 地址 WCF - 绑定 WCF - 绑定后续之自定义绑定 WCF - 契约 WCF - 序列化 WCF - 消息 WCF - 实例与会话 WCF - REST服务

  6. java 窗口的一些示例代码,可直接运行

    代码链接如下: http://pan.baidu.com/s/1gdlCI4N 有应用SWING,也有应用AWT,可视情况而定. 窗口程序运行需要jdk1.7环境(测试可用).

  7. Chapter 5. The Gradle Wrapper 关于gradle wrapper

    Most tools require installation on your computer before you can use them. If the installation is eas ...

  8. linux mysql 授权以及 iptables开启3306

    mysql授权ip段访问mysql grant all privileges on *.* to 'yang'@'192.168.1.%' identified by '123456'; linux ...

  9. 使用Windows的NAT功能

    使用管理员权限打开命令行控制台. 端口映射相关命令 查看当前机器的端口代理表: netsh interface portproxy show all C:\WINDOWS\system32>ne ...

  10. Android源码编译过程之九鼎开发板

    build_kernel() { # 进入源码顶层目录 cd ${BS_DIR_KERNEL} || # 编译配置文件 make ${BS_CONFIG_KERNEL} ARCH=arm CROSS_ ...