使用C#进行Reflection编程
来源:互联网 发布:java文件系统加密解密 编辑:程序博客网 时间:2024/05/14 04:08
代码如下:
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 name:DisplayModules
method name:DisplayTypes
method name:DisplayMethods
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
- 使用C#进行Reflection编程
- 使用C#进行Reflection编程
- 使用C#进行Reflection编程
- C#编程 Reflection(反射)
- 使用C#进行系统编程
- 使用 C# 进行 Outlook 2007 编程
- C#使用委托进行异步编程
- 使用 C# 进行 Outlook 2003 编程
- 使用 C# 进行 Outlook 2003 编程的简介
- 使用C#进行Word 2002和Excel 2002编程
- 使用C#进行Word 2002和Excel 2002编程
- 使用C#进行Word 2002和Excel 2002编程
- 使用 C# 进行 Outlook 2003 编程的简介
- C#使用WINAPI进行读取写入配置文件_C#【编程联盟】
- 使用C#进行Outlook 2003编程的简介
- 使用 OpenCL.Net 进行 C# GPU 并行编程
- 使用c#进行socket编程时,获取网卡的信息
- C#多线程之使用委托进行异步编程
- 一位同事这样诠释ERP(用武侠的观点来看ERP厂商)
- eclispe中设置javadoc和javasrc
- asp常用函数
- 我愿长跪不起——记三个投身农村教育的热血青年
- 有儿媳妇了,真高兴
- 使用C#进行Reflection编程
- PHP新手上路
- Oracle数据库字符集问题解决方案大全
- Oracle常用数据字典
- 又一关于嵌入式的定义
- 测试文章
- ORACLE应用常见傻瓜问题1000问
- 分拆统计字符串
- 刚做的一个网页计数器 大家参考一下