反射
审查元数据并收集关于它的类型信息的能力
通过反射可以获得程序集中的属性和方法。
获得程序集Assembly
using System.Reflection;
Assembly.Load(“程序集”);加载程序集,返回类型为Assembly
获得程序集中所有类的名称
foreach(Type type in assembly.GetTypes())
{
string t=type.Name;
}
获得类的类型
Type type=assembly.GetType(“程序集.类名”);
创建类的实例
Activator.CreateInstance(type);
获得方法,并调用
MethodInfo mInfo=type.GetMethod(“方法名”);
mInfo.Invoke(null,方法参数);
示例
1:通过string获得类型
Type.GetType(this.setEntity.bulletName)
PS:需要注意的是,如果自定义类是有命名空间的话,需要把命名空间带上。否则GetType返回的为null
2:获得泛型参数的具体类型
public void XXX<T>(T para1){
///para1.GetType().Name
para1.GetType()
}
3:把Type作为泛型的参数传入
Type t = Type.GetType(className);
this.weaponBuilder.BuildWeapon<t>(weaponMissile0Obj, this.plane, missileUnit, setEntity);
上述代码报错:t是变量,这里被当做类型使用。
所想实现所需需求,需要借助反射。代码如下所示:
Type t = Type.GetType(className);
MethodInfo mi = this.weaponBuilder.GetType().GetMethod("BuildWeapon").MakeGenericMethod(new Type[] { t });
weaponMissile0 = mi.Invoke(this.weaponBuilder,
new object[]
{ weaponMissile0Obj,
this.plane,
missileUnit,
setEntity }) as WeaponMissile;