【问题标题】:How to find a function in an assembly in C# by its name and argument types?如何通过名称和参数类型在 C# 程序集中查找函数?
【发布时间】:2018-10-01 17:32:10
【问题描述】:

我输入了一个托管程序集“some.dll”、一个函数名和它作为参数的类型。如何在运行时使用 .NET C# 4.6 应用程序找到这样的功能?

【问题讨论】:

  • “在运行时找到它”是什么意思?
  • 你需要更好地解释你拥有什么以及你想做什么。即使作为英语问题,这也完全不清楚

标签: c# dll reflection runtime


【解决方案1】:

如果我理解正确,您正在寻找反思

这是一个完全不切实际的例子。不过

给定

// Assembly1.dll
namespace TestAssembly
{
   public class Main
   {
      public void Run(string parameters)
      {
         // Do something... 
      }
      public void TestNoParameters()
      {
         // Do something... 
      }
   }
}

你可以做到

public object Test(string methodName)
{
   var assembly = Assembly.LoadFile("...Assembly1.dll");
   var type = assembly.GetType("TestAssembly.Main");

   if (type == null)
   {
      return null;
   }

   var methodInfo = type.GetMethod(methodName);

   if (methodInfo == null)
   {
      return null;
   }

   var parameters = methodInfo.GetParameters();
   var classInstance = Activator.CreateInstance(type, null);

   if (parameters.Length == 0)
   {
      methodInfo.Invoke(classInstance, null);
   }
   else
   {
      var parametersArray = new object[] { "Hello" };           
      return  methodInfo.Invoke(classInstance, parametersArray);
   }

   return null;
}

注意:您也可以以编程方式迭代内容并启发式地找到您正在寻找的类和方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多