问题背景:C#中,属性的实现本质上是方法,但枚举MemberTypes的成员中是区分Property(属性)和Method(方法)的。现实问题:
在我的程序的某个类C中,存在大量的属性和方法,而且这些属性和方法中都要调用同一个方法F。
我想做的是:通过反射获取调用方(类C的属性或方法)是属性还是方法?但通过StackTrace->StackFrame->MethodBase得到的MemeberType都是Method,而不论调用方是属性还是方法。PS:当然有一个变通的实现,就是在方法F中增加一个参数指明调用方类型,但这样作破坏了代码的通用性,为重构带来了隐患。请各位不吝赐教。
谢谢!
在我的程序的某个类C中,存在大量的属性和方法,而且这些属性和方法中都要调用同一个方法F。
我想做的是:通过反射获取调用方(类C的属性或方法)是属性还是方法?但通过StackTrace->StackFrame->MethodBase得到的MemeberType都是Method,而不论调用方是属性还是方法。PS:当然有一个变通的实现,就是在方法F中增加一个参数指明调用方类型,但这样作破坏了代码的通用性,为重构带来了隐患。请各位不吝赐教。
谢谢!
Type[] mytypes = a.GetTypes();
BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public |
BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach(Type t in mytypes)
{
MethodInfo[] mi = t.GetMethods(flags);
PropertyInfo[] p = t.GetProperties(flags);
}
谢谢!这个方法也不错,不过效率不高啊,要进行MethodInfo的比较。 直接针对我的问题,有更好的办法吗?