黑马程序员技术交流社区
标题: 使用C#反射 [打印本页]
作者: 甘家利 时间: 2013-2-21 21:39
标题: 使用C#反射
反射实际上就是为得到程序集中的属性和方法。今晚并制作测试程序与大家分享,也请批评指正
程序集SomeSports.dll的源文件如下所示。
using System;
public class Football : Sport
{
public Football()
{
name = "Football";
}
public override string GetDuration()
{
return "four 15 minute quarters";
}
public override string GetName()
{
return name;
}
}
public class Hockey : Sport
{
public Hockey()
{
name = "Hockey";
}
public override string GetDuration()
{
return "three 20 minute periods";
}
public override string GetName()
{
return name;
}
}
public class Soccer : Sport
{
public Soccer()
{
name = "Soccer";
}
public override string GetDuration()
{
return "two 45 minute halves";
}
public override string GetName()
{
return name;
}
}
上述代码中的父类Sport代码如下所示。
using System;
public abstract class Sport
{
protected string name;
public abstract string GetDuration();
public abstract string GetName();
}
在生成程序集SomeSport.dll后,反过来想知道这个程序集中有哪些类,以及想知道如何调用程序集中某类对象的方法时,大致步骤如下。
1. 导入using System.Reflection;
2. Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
3. foreach (Type type in assembly.GetTypes())
{
string t = type.Name;
}
得到程序集中所有类的名称
4. Type type = assembly.GetType("程序集.类名");获取当前类的类型
5. Activator.CreateInstance(type); 创建此类型实例
6. MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
7. mInfo.Invoke(null,方法参数);
根据上述步骤,制作测试代码如下所示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Assembly assembly1 = Assembly.LoadFrom("SomeSports.dll");
string t = "";
foreach (Type type1 in assembly1.GetTypes())
{
t = type1.Name;
Console.WriteLine(t);
}
if (t != null)
{
Type type = assembly1.GetType(t);//获取当前类的类型
Object dynamicObject = Activator.CreateInstance(type); //创建此类型实例
MethodInfo mInfo = type.GetMethod("GetDuration");//获取当前方法
string s = (string)mInfo.Invoke(dynamicObject, null);
Console.WriteLine(s);
}
Console.ReadKey();
}
}
}
作者: 许庭洲 时间: 2013-2-22 14:21
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |