DynamicType.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. namespace Island.StandardLib.Reflection
  7. {
  8. public class DynamicType
  9. {
  10. public Type ClassType { get; private set; }
  11. Dictionary<string, MethodInfo[]> CachedMethods;
  12. Dictionary<string, MemberInfo> CachedMembers;
  13. public DynamicType(Type classType)
  14. {
  15. ClassType = classType;
  16. CachedMethods = new Dictionary<string, MethodInfo[]>();
  17. CachedMembers = new Dictionary<string, MemberInfo>();
  18. }
  19. public MethodInfo[] FindMethod(string methodName)
  20. {
  21. if (CachedMethods.TryGetValue(methodName, out MethodInfo[] result)) return result;
  22. MethodInfo[] methods = (from met in ClassType.GetMethods()
  23. where met.Name == methodName
  24. select met).ToArray();
  25. if (methods.Length == 0) return methods;
  26. CachedMethods.Add(methodName, methods);
  27. return methods;
  28. }
  29. public MemberInfo FindMember(string memberName)
  30. {
  31. if (CachedMembers.TryGetValue(memberName, out MemberInfo result)) return result;
  32. MemberInfo[] members = (from meb in ClassType.GetMembers()
  33. where meb.Name == memberName
  34. select meb).ToArray();
  35. if (members.Length == 0) return null;
  36. CachedMembers.Add(memberName, members[0]);
  37. return members[0];
  38. }
  39. }
  40. }