如何以编程方式更改我调用的函数名称

我试图根据组合框的信息调用函数。用户将更改组合框,在此过程中,我们根据与固定文本连接的组合框文本中的数据调用函数。我正在尝试这样做,因此每次获得新版本时,我只需添加一个文件夹,而不必像在 case 语句中那样进入代码添加新函数名称。


组合框的文本为


v6.1

v6.4 

v7.2

v8.6

等等


我想要调用的函数名为 Getinfo_,并添加了组合框中的文本,扩展名为 . 替换为 _ 例如,我会从组合框中选择 v6.1,这样做时我会调用名为 Getinfo_v6_1 的函数


经过大量的思考、搜索和尝试,我已经接近但还不够接近。我想我需要使用反射(也许不需要)并且


private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)

{

    Type t = this.GetType(); //need to get the type

    MethodInfo method = t.GetMethod("Getinfo" + cmbobx_version.Text.Replace('.', '_'));   //put together function name

     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters

}

不幸的是,这在调用时停止,说该方法为 NULL,我不明白为什么会这样,除了也许我完全误解了我在做什么。


我想调用的函数看起来有点像下面的


public void Getinfo_v6_1(ComboBox inFocusComboBox, string action)

{

  switch (inFocusComboBox.Text)

        {

           case "Red": Price = 11254; break;

           case "Blue": Price = 11278; break;

           case "Green": Price = 11354; break;

         }

}



public void Getinfo_v6_4(ComboBox inFocusComboBox, string action)

{

   switch (inFocusComboBox.Text)

        {

            case "Red": Price = 254; break;

            case "Blue": Price = 278; break;

            case "Green": Price = 354; break;

          }

}

即使您有更好的方法来做我需要做的事情,我们也非常感谢您的所有帮助。


一只萌萌小番薯
浏览 102回答 2
2回答

缥缈止盈

您应该阅读有关设计模式的信息,例如您可以使用模板设计模式创建实现您的功能的多态项。尽量避免反射,因为它很“慢”并且类型不安全。

芜湖不芜

我确实错过了下划线,在使用它时我没有注意到,因为我还进行了文本替换。并认为这一切都是正确的。即使在调试时我没有看到它,通常我们也看不到明显的东西,这就是为什么那些比我聪明的人的第二意见总是好的。现在的工作代码如下。private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e){    Type t = this.GetType(); //need to get the type    MethodInfo method = t.GetMethod("Getinfo_" + cmbobx_version.Text.Replace('.', '_'));   //put together function name     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters}请务必小心,因为这些函数将没有引用,但它会编译并运行。当您调用正确的函数时,这一切都会在运行时起作用。
打开App,查看更多内容
随时随地看视频慕课网APP