模块信息是通过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之间的数据复制)。