Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection;
- using System.Linq.Expressions;
- using System.Linq;
- namespace ReporSigSegVmono
- {
- class MainClass
- {
- private static readonly BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
- public static void Main (string[] args)
- {
- Expression<Func<IFoo,DateTime?>> e2 = foo => (foo.unboxed);
- var me2 = e2.Body as MemberExpression;
- var result2 = getPropertyInfo (me2.Member as PropertyInfo, typeof(FooImpl));
- Console.WriteLine (result2.Name);
- }
- private static MethodInfo getMethodInfo(MethodInfo interfaceMethod, Type implementingType) {
- var interfaceType = interfaceMethod.DeclaringType;
- var interfaceMap = implementingType.GetInterfaceMap (interfaceType);
- for (int i = 0; i < interfaceMap.InterfaceMethods.Length; i++)
- if (interfaceMap.InterfaceMethods [i] == interfaceMethod)
- return interfaceMap.TargetMethods [i];
- return null;
- }
- private static PropertyInfo getPropertyInfo (PropertyInfo interfaceProperty, Type implementingType) {
- var interfaceGetter = interfaceProperty.GetGetMethod();
- if (interfaceGetter != null) {
- var getterImpl = getMethodInfo(interfaceGetter, implementingType);
- return implementingType.GetProperties(bindingFlags | BindingFlags.GetProperty).First(p => p.GetGetMethod(true) == getterImpl);
- }
- return null;
- }
- }
- abstract class FooImpl : FooBase, IFoo {
- public abstract void doBarAction();
- public abstract DateTime? unboxed {
- get;
- set;
- }
- }
- interface IFoo {
- void doBarAction();
- DateTime? unboxed { get; set; }
- }
- abstract class FooBase {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement