第一步:新建一个类库项目,命名“ReflectionExample” ,代码:
using
System;
namespace ReflectionExample
{
public class HelloWorld
{
string myName = null ;
public HelloWorld( string name)
{
myName = name;
}
public HelloWorld()
: this ( null )
{ }
public string Name
{
get
{
return myName;
}
}
public void SayHello()
{
if (myName == null )
{
System.Console.WriteLine( " Hello World " );
}
else
{
System.Console.WriteLine( " Hello, " + myName);
}
}
}
}
namespace ReflectionExample
{
public class HelloWorld
{
string myName = null ;
public HelloWorld( string name)
{
myName = name;
}
public HelloWorld()
: this ( null )
{ }
public string Name
{
get
{
return myName;
}
}
public void SayHello()
{
if (myName == null )
{
System.Console.WriteLine( " Hello World " );
}
else
{
System.Console.WriteLine( " Hello, " + myName);
}
}
}
}
编译,生成一个ReflectionExample.dll文件.
第二步:新建一个项目,命名“Reflection”,添加引用“ReflectionExample.dll”
using
System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;
namespace ReflectionExample
{
class Class1
{
// [STAThread]
static void Main( string [] args)
{
System.Console.WriteLine( " 列出程序集中的所有类型 " );
Assembly a = Assembly.LoadFrom( " ReflectionExample.dll " );
Type[] mytypes = a.GetTypes();
foreach (Type t in mytypes)
{
System.Console.WriteLine(t.Name);
}
System.Console.ReadLine();
Console.WriteLine( " ManifestModule,获取该程序清单的模块:{0} " , a.ManifestModule);
Console.ReadLine();
Console.WriteLine( " CodeBase,获取最初指定程序集的位置:{0} " , a.CodeBase);
Console.ReadLine();
Console.WriteLine( " Entry point,获取此程序集的入口点:{0} " , a.EntryPoint);
Console.ReadLine();
System.Console.WriteLine( " 列出HellWord中的所有方法 " );
Type ht = typeof (HelloWorld);
MethodInfo[] mif = ht.GetMethods();
foreach (MethodInfo mf in mif)
{
System.Console.WriteLine(mf.Name);
}
System.Console.ReadLine();
System.Console.WriteLine( " 实例化HelloWorld,并调用SayHello方法 " );
Object obj = Activator.CreateInstance(ht);
string [] s = { " zhenlei " };
Object bojName = Activator.CreateInstance(ht, s);
BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
MethodInfo msayhello = ht.GetMethod( " SayHello " );
msayhello.Invoke(obj, null );
msayhello.Invoke(bojName, null );
System.Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;
namespace ReflectionExample
{
class Class1
{
// [STAThread]
static void Main( string [] args)
{
System.Console.WriteLine( " 列出程序集中的所有类型 " );
Assembly a = Assembly.LoadFrom( " ReflectionExample.dll " );
Type[] mytypes = a.GetTypes();
foreach (Type t in mytypes)
{
System.Console.WriteLine(t.Name);
}
System.Console.ReadLine();
Console.WriteLine( " ManifestModule,获取该程序清单的模块:{0} " , a.ManifestModule);
Console.ReadLine();
Console.WriteLine( " CodeBase,获取最初指定程序集的位置:{0} " , a.CodeBase);
Console.ReadLine();
Console.WriteLine( " Entry point,获取此程序集的入口点:{0} " , a.EntryPoint);
Console.ReadLine();
System.Console.WriteLine( " 列出HellWord中的所有方法 " );
Type ht = typeof (HelloWorld);
MethodInfo[] mif = ht.GetMethods();
foreach (MethodInfo mf in mif)
{
System.Console.WriteLine(mf.Name);
}
System.Console.ReadLine();
System.Console.WriteLine( " 实例化HelloWorld,并调用SayHello方法 " );
Object obj = Activator.CreateInstance(ht);
string [] s = { " zhenlei " };
Object bojName = Activator.CreateInstance(ht, s);
BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
MethodInfo msayhello = ht.GetMethod( " SayHello " );
msayhello.Invoke(obj, null );
msayhello.Invoke(bojName, null );
System.Console.ReadLine();
}
}
}
运行结果是: