110,502
社区成员
发帖
与我相关
我的任务
分享
class a:IReflect
{
private MethodInfo _default=null;
public override MethodInfo GetMethod(string name,BindingFlags flag)
{
MethodInfo mi=null;
try{mi=typeof(a).GetMethod(name,flag);}catch{}
if(mi!=null)
{
return mi;
}else{
if(_default-=null)
{
_default=this.GetType().GetMethod("DefaultMethod",BindingFlags.Public|BindingFlags.Instance);
}
return _default;
}
}
public override object DefaultMethod(){return new Object();}
}
或者你也可以自己写个接口,获取时返回methodinfo与其对应的object,这样方便管理,再或者干脆直接返回个delegate。 class a
{
public static object Method1()
{
return new object();
}
}
System.Reflection.MethodInfo method = typeof(a).GetMethod("test", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic, null, new Type[] { }, null);
object o = method != null ? method.Invoke(null, null) : a.Method1();
System.Reflection.MethodInfo method = typeof(a).GetMethod("test", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic, null, new Type[] { }, null);
object o = method != null ? method.Invoke(null, null) : null;
try{
object o = a.test();
}
catch(){
object o = a.Method1();
}