ILMethod.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using ILRuntime.CLR.Method;
  3. using ILRuntime.Runtime.Intepreter;
  4. namespace Model
  5. {
  6. public class ILInstanceMethod : IInstanceMethod
  7. {
  8. private readonly ILRuntime.Runtime.Enviorment.AppDomain appDomain;
  9. private readonly ILTypeInstance instance;
  10. private readonly IMethod method;
  11. private readonly object[] param;
  12. public ILInstanceMethod(Type type, string methodName)
  13. {
  14. appDomain = Init.Instance.AppDomain;
  15. this.instance = this.appDomain.Instantiate(type.FullName);
  16. this.method = this.instance.Type.GetMethod(methodName);
  17. int n = this.method.ParameterCount;
  18. this.param = new object[n];
  19. }
  20. public override void Run()
  21. {
  22. this.appDomain.Invoke(this.method, this.instance, param);
  23. }
  24. public override void Run(object a)
  25. {
  26. this.param[0] = a;
  27. this.appDomain.Invoke(this.method, this.instance, param);
  28. }
  29. public override void Run(object a, object b)
  30. {
  31. this.param[0] = a;
  32. this.param[1] = b;
  33. this.appDomain.Invoke(this.method, this.instance, param);
  34. }
  35. public override void Run(object a, object b, object c)
  36. {
  37. this.param[0] = a;
  38. this.param[1] = b;
  39. this.param[2] = c;
  40. this.appDomain.Invoke(this.method, this.instance, param);
  41. }
  42. }
  43. public class ILStaticMethod : IStaticMethod
  44. {
  45. private readonly ILRuntime.Runtime.Enviorment.AppDomain appDomain;
  46. private readonly IMethod method;
  47. private readonly object[] param;
  48. public ILStaticMethod(string typeName, string methodName, int paramsCount)
  49. {
  50. appDomain = Init.Instance.AppDomain;
  51. this.method = appDomain.GetType(typeName).GetMethod(methodName, paramsCount);
  52. this.param = new object[paramsCount];
  53. }
  54. public override void Run()
  55. {
  56. this.appDomain.Invoke(this.method, null, this.param);
  57. }
  58. public override void Run(object a)
  59. {
  60. this.param[0] = a;
  61. this.appDomain.Invoke(this.method, null, param);
  62. }
  63. public override void Run(object a, object b)
  64. {
  65. this.param[0] = a;
  66. this.param[1] = b;
  67. this.appDomain.Invoke(this.method, null, param);
  68. }
  69. public override void Run(object a, object b, object c)
  70. {
  71. this.param[0] = a;
  72. this.param[1] = b;
  73. this.param[2] = c;
  74. this.appDomain.Invoke(this.method, null, param);
  75. }
  76. }
  77. }