Reflector,反射机制,可以实现对.net程序集的反编译
/*---==------------------------------------------------------===--
1、通过Assembly.LoadFrom方法可以加载某程序集
Assembly b = Assembly.LoadFrom("sayhello.exe");
2、程序集对象的GetTypes方法可以获得Type对象的集合
Type[] mytypes = b.GetTypes();
3、每个Type会有很多Method,通过Type对象(如实例type)的GetMethods可以获得
MethodInfo[] mif = type.GetMethods();
4、Activator类的静态方法CreateInstance可以构建类型的实例
Object bojName = Activator.CreateInstance(ht, s);
5、MethodInfo方法对象可以通过Invoke将对象作为参数实现方法的呼叫
Invoke还可以返回调用结果。
* ---==------------------------------------------------------===--*/
using System;
using System.Text;
using System.Reflection;
using System.IO;
namespace TestAssemblyConsoleApp
{
class Program
{
static void Main(string[] args)
{
//读取当前路径下的sayHello.exe文件,并列出其所有的类
System.Console.WriteLine("Assembly.LoadFrom(\"sayhello.exe\");,并列出其所有的类");
Assembly b = Assembly.LoadFrom("sayhello.exe");
Type[] mytypes = b.GetTypes();//程序集的GetTypes方法返回所有Type对象的集合
foreach (Type t in mytypes)
{
System.Console.WriteLine(t.FullName);
}
//分析当前EXE自身的所有方法
System.Console.WriteLine("分析当前EXE自身的所有方法,任意键继续
");
System.Console.ReadLine();
Type ht = typeof(HelloWorld);
MethodInfo[] mif = ht.GetMethods();//类型Type的GetMethods方法返回所有方法的集合
foreach (MethodInfo mf in mif)
{
System.Console.WriteLine(mf.Name);
}
//将类实例化,并调用其内部的方法
System.Console.WriteLine("将类实例化,并调用其内部的方法,任意键继续
.");
System.Console.ReadLine();
Object obj = Activator.CreateInstance(ht);//调用无参构造函数创建实例
string[] s = { "veky" };
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);//SayHello,通过无参数的实例
msayhello.Invoke(bojName, null);//SayHello调用带参构造函数
msayhello = ht.GetMethod("getString");
string str = msayhello.Invoke(obj, null) as string;//有返回值
System.Console.WriteLine(str);
}
}
"类HelloWorld定义"
}

浙公网安备 33010602011771号