代码中有很多计算,根据初始数据,我得到不同的结果。初始数据由 value 确定ComboBox
,因此,根据此,将外部库方法之一分配给变量。实现这一点的最佳方法是什么?因此,我认为,取决于Combobox
将变量与库中方法的名称等同起来string
并使用reflection
. 而在代码中,我需要改变的只是通过开关迭代值Combobox
并分配方法的名称。因为ComboBox
最终会有 30-40 个值。我们需要一些通用和简洁的东西。
代码中有很多计算,根据初始数据,我得到不同的结果。初始数据由 value 确定ComboBox
,因此,根据此,将外部库方法之一分配给变量。实现这一点的最佳方法是什么?因此,我认为,取决于Combobox
将变量与库中方法的名称等同起来string
并使用reflection
. 而在代码中,我需要改变的只是通过开关迭代值Combobox
并分配方法的名称。因为ComboBox
最终会有 30-40 个值。我们需要一些通用和简洁的东西。
我会做一个这样的数据结构:
现在外部程序集在您手中,它可以轻松地提供您需要的所有方法的列表。例如,像这样:
等等。您也可以不手动收集方法,而是通过反射。
在客户端,一切都很简单:
获取接口:
代替静态方法,创建实现它的类:
然后,您可以获得实现给定接口的类列表,如下所示:
然后,在选择所需的操作后,我们创建它的一个实例并运行它:
这种方法的缺点(对我来说 - 无关紧要)是这些具有操作的类必须有一个没有参数的构造函数。
另一种方法是通过反射来获取一个类/程序集的所有方法,为了将必要的方法与其他方法区分开来,可以创建一个自定义属性:
我们用属性标记必要的方法:
我们得到列表:
我们称之为必需的:
这种方法的缺点是没有针对方法可能具有不同签名的事实的保护,这将导致执行期间的错误。
如果需要,您可以在属性中创建一个属性来指示方法的名称:
然后,您可以获得这样的名称:
并问:
[Execute("Сложить")]
好吧,为了方便调用方法,您可以基于它创建一个委托(感谢@VladD 的提示):