关于这个问题的一个小背景故事:
我正在为我的本地酒吧写一个POS系统,我希望它能够启用插件.对于这个特殊问题,我将使用以下场景:
我有一个计算器类,顾名思义,它涉及当前收据,增值税等产品的所有计算.我希望这个类可以通过插件扩展(在不同的程序集中)来添加功能使用我们使用的这些特殊硬币.计算器只是遍历收据上的所有产品(在其构造函数中传递)来计算总金额.收据类具有其上的所有产品对象的列表.内置产品类没有任何与硬币相关的成员,这些成员位于插件程序集中的另一个产品类中.
这里的问题是,如何让我的主程序动态选择正确的类用于产品?
我正在考虑将所有插件加载到列表或字典中,并简单地遍历它们以检查是否存在产品类的覆盖,然后使用它,但我仍然需要某种通用接口,这不是一个选项.我确切知道如何在PHP中执行此操作,但是可以在运行/安装时使用更新的源编辑/替换源.
谢谢,Thom.
编辑:简化问题:是否可以让外部插件程序集使用新方法扩展内置程序集,而无需在现有应用程序中对方法的名称/委托/任何内容进行硬编码?
从提供的问题看,没有任何理由不使用通用接口.例:
public interface IProduct {
decimal Price {get;}
}
public class Product : IProduct
{
decimal price;
public decimal Price {
get {
return price;
}
}
}
public class Product1 : IProduct
{
decimal price;
public decimal Price {
get {
return price;
}
}
}
....
Run Code Online (Sandbox Code Playgroud)
之后Calculator在收集迭代IProducts,并呼吁每个人的Price财产,申请区有关增值税+什么,构建最终价格.