我已经阅读了两天反思的例子,我似乎无法把所有东西拼凑起来以适应我需要的东西。事实上我以为我在使用反射,直到我注意到我的“使用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返回错误,找不到构造函数..它就在那里。
答案 0 :(得分:3)
类名必须是完全限定的(包括命名空间,最有可能是程序集)才能解析它。如果您知道该类位于当前正在执行的程序集中,则可以使用Assembly.GetExecutingAssembly()。GetType()
答案 1 :(得分:2)
您确定指定了包含名称空间的完整类名吗?没有命名空间,结果将为null。
答案 2 :(得分:0)
对于GetType,您必须提供完全限定的名称。您可以使用
获取现有对象MyObject.GetType().AssemblyQualifiedName;