簡體   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