您的位置:首页 > 编程语言 > C#

C#反射小结

2010-08-03 08:52 218 查看
今天就来一个反射的例子,主要是调用动态dll文件的,然后反射出里面的方法等,具体见下面的例子(留着自己和初学者看,呵呵):

代码

using System;
using System.Reflection;

namespace 反射举例
{
public class Program
{
private String file = @"反射举例.exe";
static void Main(string[] args)
{
Program test = new Program();
test.DisplayModules();
test.DisplayTypes();
test.DisplayMethods();
test.InvokeStaticMethod();
test.InvokeMethod();
Console.ReadLine();
}
//显示所有模块名
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("反射举例.Program");
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");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: