C#反射 - 根据参数数量选择要运行的特定方法的过载

时间:2017-11-30 14:31:40

标签: c# reflection

我有一个类,它有一个带有多个重载的方法,如下所示

QStandardItem * item = new QStandardItem();
item->setText("someText");
item->setCheckable(true);

item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
item->setData(Qt::Checked, Qt::CheckStateRole);

m_model->appendRow(item);
m_ComboBox->setModel(m_model);

在另一个类中,我有一个按钮单击事件处理程序,它根据用户输入构建应传递给上述方法的参数列表:

class MyClass
{
    public bool DoSomething(string linkedServerName, string serverName, string instanceName, string userName, string Password)
    {
        // OverLoad1
        // do stuff
    } 
    public bool DoSomething(string linkedServerName, string serverName, string instanceName)
    {
        // OverLoad2
        // do stuff
    } 
    public bool DoSomething(string linkedServerName, string serverName, string userName, string Password)
    {
        // OverLoad3
        // do stuff
    } 
    public bool DoSomething(string linkedServerName, string serverName)
    {
        // OverLoad4
        // do stuff
    } 
    private bool DoSomething(List<SqlParameter> parms)
    {
        // OverLoad5
        // do stuff
    } 
}

我已经获得了我想调用的方法,该方法在变量m中被引用,但我不确定如何调用。我知道MethodInfo类有一个Invoke方法,我试过了:

public class MyForm : Form
{
    // code...

    private void Button1_Click(object sernder, EventArgs e)
    {
         List<String> parms = New List<String>();
         //code here which will populate the above list with values dependant on which text boxes the user has filled in

         Type t = new MyClass().GetType();
         Type[] ts = new Type[parms.Count];

         for (int i=0; i< parms.Count; i++)
         {
             ts[i] = typeof(string);
         }

         System.Reflection.MethodInfo m = t.GetMethod("CreateLinkedServer",ts)

         // how do I invoke the method referenced in m??
    }
}

他们都没有工作

0 个答案:

没有答案