如何动态调用类(带构造函数)和它的方法?

本文关键字:方法 构造函数 何动态 动态 调用 | 更新日期: 2023-09-27 17:48:58

这两天我一直在阅读Reflection的例子,但我似乎不能把所有的东西拼凑起来,以满足我的需要。事实上,我以为我在使用反射,直到我注意到我的"使用系统"。"倒影"是灰色的。: -)

我有一个包含类名和其中包含的方法的xml文件。方法的顺序甚至名称都可以改变。一旦我读取它们,我希望能够执行它们。看起来很简单。

我有以下测试代码:
    // myClassName = "namespace.TransactionServices"
    Type tb = Type.GetType(myClassName);
    // Classes will always have the same constructor
    object classInstance = Activator.CreateInstance (
        tb, 
        new object[] 
        {
            authorization.apiKey, 
            authorization.userName, 
            testData.servicesEndPoint
        });
    //Grab the method I want
    //myMethodName = "GetVersion"
    MethodInfo mymethod = tb.GetMethod(myMethodName);
    // no parameters for this method call
    object result = mymethod.Invoke(classInstance, null);

tb为空。我只是想努力获得创建类的正确API,但我甚至不知道我所拥有的其余内容是否有效。

有什么建议吗?

感谢

编辑:添加命名空间。激活。CreateInstance返回构造函数未找到的错误。

如何动态调用类(带构造函数)和它的方法?

类名必须是完全限定的(包括名称空间,很可能还包括程序集),以便解析它。如果您知道类在当前执行的程序集中,则可以使用assembly . getexecutingassembly ().GetType()

您确定指定了完整的类名,包括名称空间吗?如果没有命名空间,结果将为空。

对于GetType,您必须提供一个完全限定的名称。您可以使用

为现有对象获取它。
MyObject.GetType().AssemblyQualifiedName;