问题背景:C#中,属性的实现本质上是方法,但枚举MemberTypes的成员中是区分Property(属性)和Method(方法)的。现实问题:
在我的程序的某个类C中,存在大量的属性和方法,而且这些属性和方法中都要调用同一个方法F。
我想做的是:通过反射获取调用方(类C的属性或方法)是属性还是方法?但通过StackTrace->StackFrame->MethodBase得到的MemeberType都是Method,而不论调用方是属性还是方法。PS:当然有一个变通的实现,就是在方法F中增加一个参数指明调用方类型,但这样作破坏了代码的通用性,为重构带来了隐患。请各位不吝赐教。
谢谢!

解决方案 »

  1.   

    你调用一下GetProperties()方法不是可以获取所有的公共属性么
      

  2.   

    Assembly a = Assembly.LoadFrom(args[0]);
            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);
            }
      

  3.   

    To thelostland:
       谢谢!这个方法也不错,不过效率不高啊,要进行MethodInfo的比较。   直接针对我的问题,有更好的办法吗?