繁体   English   中英

反射调用方法

[英]Reflection Invoke Method

我有以下C#代码。 一个基类和从该基类继承的类。 我在特殊的列表中使用此基类。 该列表还具有成员ReadListAsXmlAs。

public class ResultSetBase
{
   some Members
}

public class ResultSetBaseSweep : ResultSetBase
{
   some other Members
}

public class ResultList<T> where T : ResultSetBase
{
    public ResultList<T> ReadListAsXmlAs(params string[] path)
    {
      ...
    }
}

在另一种方法中,我想创建一个类型为ResultList的动态对象。 我只在运行时知道ResultList是哪个类。 (例如ResulstSetBaseSweep或从ResultSetBase继承的任何其他)。

我创建这种类型的动态对象。 以下方式。

Type myType = Type.GetType("Class in String Format");
Type listtype = typeof(ResultSaver.ResultList<>).MakeGenericType(myType);

object resultlist = Activator.CreateInstance(listtype);

现在,我需要调用Methode ReadListAsXmlAs。 由于它是对象类型,当我尝试调用时,编译器会抱怨

resultlist.ReadListAsXmlAs(...);

所以我试图通过思考来称呼它:

myType.InvokeMember("ReadListAsXmlAs", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, resultlist, new object[] { filenames.ToArray() });

然后,我得到编译器错误:未找到ReadListAsXmlAs! 如何正确进行?

我找到了解决该问题的方法:

Type myType = Type.GetType(LstBoxClass.SelectedItem.ToString());
Type listtype = typeof(ResultSaver.ResultList<>).MakeGenericType(myType);

object resultlist = Activator.CreateInstance(listtype);

MethodInfo method = listtype.GetMethod("ReadListAsXmlAs");
method.Invoke(resultlist, new Object[] {filenames.ToArray()});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM