c# - 如何以编程方式更改我调用的函数名称
问题描述
我正在尝试根据组合框中的信息调用函数。用户将更改组合框,在此过程中,我们根据组合框文本中的数据和固定文本调用一个函数。我正在尝试这样做,所以每次我们得到一个新版本时,我只需添加一个文件夹,而不必像在 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;
}
}
即使您有更好的方法来做我需要做的事情,所有帮助都将不胜感激。
解决方案
您应该阅读设计模式,例如,您可以使用模板设计模式创建实现您的功能的多态项。尽量避免反射,因为它“慢”且不安全。
推荐阅读
- laravel - 在 laravel 中使用 foreach 时如何按降序打印表格?
- angular - Angular 7 ng-select 从函数中获取项目,重复无限次
- python - 返回多个变量的列表理解:排除“__name__”、“__doc__”等
- python - 我如何读取文件夹和子文件夹 *.wav ;以及用于训练模型输入的特征提取?
- mysql - 基于关联列值的唯一约束
- android - 修复 Android 中的 Zip 路径遍历漏洞
- python - 如何为CNN输入python制作3维数组
- java - 如何通过 JPA 从连接的第二个表中检索特定行
- vue.js - 删除当前页面的 Vuex 记录时如何处理导航?
- ajax - BootsFaces DateTimePicker AJAX 不工作