技术文章 > 使用C#进行Reflection编程

使用C#进行Reflection编程

2018-06-23 01:16

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
[code]
csharp
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");
}
}
[/code]
编译运行后输出:
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