【问题标题】:How do I dynamically call a class and use it's functions?如何动态调用一个类并使用它的功能?
【发布时间】:2012-09-03 01:30:57
【问题描述】:

我在尝试动态调用我的课程时遇到问题。这是我的示例代码:

类:

namespace TestUseCase
{
    public class UseCase11
    {
        public UseCase11()
        {
        }

        public string init()
        {
            return "aa.aspx";
        }
    }
}

类的调用方法:

private void dynamicExecution(string ClassName, string FunctionName)
{
    System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
    Object[] para = new Object[1];
    para[0] = null;
    object dynMyClass = assembly.CreateInstance(ClassName);
    dynMyClass.GetType().GetMethod(FunctionName).Invoke(dynMyClass, para);
}   

用法:

    dynamicExecution("TestUseCase.UseCase11", "init");

不幸的是,结果总是null。我该如何解决这个问题?

【问题讨论】:

  • 尝试,在您的 dynamicExecution 方法中:assembly.GetTypes().Where(m => m.Name == "UseCase11").Select(x => x.FullName).FirstOrDefault(); 看看您是否在正确的程序集中并写下正确的类型全名。
  • 请帮助我了解您的代码,我在我的方法中添加此代码的位置,以及您的代码中的 WHERE 是什么?!!
  • 把它放在你的 dynamicExecution 方法中(使用var test = <mycode>;)。我在测试中没有得到任何结果,那是装配问题。如果有结果,请查看 test 的值。

标签: c# class function reflection call


【解决方案1】:

确保您尝试实例化的类在正确的程序集中声明。在您的示例中,您使用的是Assembly.GetEntryAssembly(),但这是正确的程序集吗?如果该类与您显示的代码在同一程序集中定义,您也可以使用Assembly.GetExecutingAssembly()

【讨论】:

  • 我希望我的类动态调用,我的类不是dll或其他文件,但是我搜索这个主题,大家都用这种方式调用类和函数!!!我将代码更改为您的答案,但“dynMyClass”为空:(
  • UseCase11 类是在哪个程序集中定义的?您需要加载此程序集。我不明白你说的I want my classes to dynamically call and my classes not dll or other file 是什么意思。
  • 我在 app_code 文件夹中有几个类,我想获取 2 个参数(类名、方法名)并使用类和方法(动态调用)
  • @mohammadabedi 你“几个组件”是偶然的吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多