CSharp:如何动态调用类(带构造函数)及其方法?

时间:2011-04-05 18:48:10

标签: c# reflection dynamic-class-creation

我已经阅读了两天反思的例子,我似乎无法把所有东西拼凑起来以适应我需要的东西。事实上我以为我在使用反射,直到我注意到我的“使用System.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,但我甚至不知道我的其余部分是否有效。

有什么建议吗?

由于

编辑:添加名称空间。 Activator.CreateInstance返回错误,找不到构造函数..它就在那里。

3 个答案:

答案 0 :(得分:3)

类名必须是完全限定的(包括命名空间,最有可能是程序集)才能解析它。如果您知道该类位于当前正在执行的程序集中,则可以使用Assembly.GetExecutingAssembly()。GetType()

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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