c# - 根据亚型的几种行为
问题描述
假设我有一个界面
public interface IA
{
double PerformCalculation();
}
和一个
public class C
{
public IA ia {get; set;}
public double DoCalculation()
{
return ia.SomeFunctionToImplement();
}
}
子类型是指实现这个接口的类。背后的想法PerformCalculation
是,它是一个函数,在实现它的子类型中执行密集的数值计算,遵循数值算法。我的问题是我有一些子类型,除了数值算法之外,还有一个允许跳过数值算法的公式,因此对于这些子类型,我可以选择:算法或公式。
有什么方法/“设计”可以让我跟踪这个选择?
解决方案
您可以class C
使用 FormulaIA 增强您的能力:
public class C
{
public IA NumericalIA { get; set; }
public IA FormulaIA { get; set; }
public double DoCalculation()
{
if (this.FormulaIA != null && ShouldUseFormula()) // ShouldUseFormula is your logic for deciding
{
return this.FormulaIA.PerformCalculation();
}
else
{
return this.NumericalIA.PerformCalculation();
}
}
}
然后,创建你的 C 类的人只能填充一个或两个实现,你的类可以决定使用哪一个。
这与让接口实现这两种方法没有太大区别,但它不会用不必要的方法使不支持公式方法的实现混乱。
推荐阅读
- cocoa - 为什么 viewDidLoad() 函数在我的 NSTabViewController 的每个 NSViewController 中运行?
- c# - 使用 python.net 获取 C# 枚举描述?
- node.js - 如何在自适应卡中包含产品视频?- 机器人框架 V4,Node.js
- r - 如果行为“空”,则在具有单个默认值的矩阵中交换 NA
- vba - Word 检查使用 VBA 的全局模板加载项
- c# - 阅读棋盘后在 Unity 中创建 FEN 字符串
- ruby-on-rails - 自定义 form_for collection_check_boxes 查看结果
- javascript - 如何在javascript中为未知类型变量的值返回布尔真/假?
- reactjs - 使用 Jest/ 酶测试 this.setState 以进行反应 JS - VSC
- python - 检索分类层预测总是产生相同的结果