代码如下:
using System;
using System.Reflection;
using System.Reflection.Emit ;
public class TestReflection {
private String file = @\"TestReflection.exe\";
static void Main(String[] args) {
TestReflection test = new TestReflection();
test.DisplayModules();
test.DisplayTypes();
test.DisplayMethods();
test.InvokeStaticMethod();
test.InvokeMethod();
}
//显示所有模块名
public void DisplayModules() {
Console.WriteLine(\"display modules ...\");
Assembly assembly = Assembly.LoadFrom(file);
Module[] modules = assembly.GetModules();
foreach( Module module in modules ) {
Console.WriteLine(\"module name:\" + module.Name );
}
}
//显示所有类型名
public void DisplayTypes() {
Console.WriteLine(\"display types ...\");
Assembly assembly = Assembly.LoadFrom(file);
Type[] types = assembly.GetTypes();
foreach( Type type in types ) {
Console.WriteLine(\"type name:\" + type.FullName );
}
}
//先是一个类型中的所有方法名
public void DisplayMethods() {
Console.WriteLine(\"display methods in TestReflection Type ...\");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType(\"TestReflection\");
MethodInfo[] methods = type.GetMethods();
foreach(MethodInfo method in methods) {
Console.WriteLine(\"method name:\" + method.Name);
}
}
//调用一个类中的静态方法
public void InvokeStaticMethod() {
Console.WriteLine(\"Invoke static method ...\");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType(\"TestSubClass\");
type.InvokeMember (\"SayHello\", BindingFlags.InvokeMethod,null,null,new object[]{});
}
//调用一个类中的非静态方法
public void InvokeMethod() {
Console.WriteLine(\"Invoke Method ...\");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType(\"TestSubClass\");
Object obj = Activator.CreateInstance(type);
TestClass tc = (TestClass)obj ;
type.InvokeMember (\"Test1\", BindingFlags.InvokeMethod,null,tc,new object[]{});
type.InvokeMember (\"Test2\", BindingFlags.InvokeMethod,null,tc,new object[]{});
}
}
public interface TestClass {
void Test1();
void Test2();
}
public class TestSubClass : TestClass{
public void Test1() {
Console.WriteLine(\"This is TestSubClass.Test1\");
}
public void Test2() {
Console.WriteLine(\"This is TestSubClass.Test2\");
}
public static void SayHello() {
Console.WriteLine(\"This is TestSubClass.SayHello\");
}
}
编译运行后输出:
display modules ...
module name:TestReflection.exe
display types ...
type name:TestReflection
type name:TestClass
type name:TestSubClass
display methods in TestReflection Type ...
method name:GetHashCode
method name:Equals
method name:ToString
method nameisplayModules
method nameisplayTypes
method nameisplayMethods
method name:InvokeStaticMethod
method name:InvokeMethod
method name:Test2
method name:GetType
Invoke static method ...
This is TestSubClass.SayHello
Invoke Method ...
This is TestSubClass.Test1
This is TestSubClass.Test2 |