作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 AnnuityContext 类,其中包含贷款年金支付的数据。Сclass 包含以两种方式计算年金支付的方法 - 等额支付和差异支付 - CalculationDifferential 和 CalculationEqual。
public class AnnuityContext : INotifyPropertyChanged
{
//...
internal void CalculationDifferential()
{
//...
}
internal void CalculationEqual()
{
//...
}
}
MainPage 有组合框和按钮。按下按钮时,根据组合框的选择,将调用适当的方法:
private void buttonCalculation_Click(object sender, RoutedEventArgs e)
{
if (flag == 1)
this.AnnuityData.CalculationDifferential();
else
this.AnnuityData.CalculationEqual();
}
我的问题是如何以更面向对象的风格来执行相同的任务。可能是创建方法 Calculation 并从该函数 CalculationDifferential() 和 CalculationEqual() 调用?
internal void Calculation()
{
//...
}
最佳答案
我会使用继承和多态性:
void Main()
{
Process(new DifferentialAnnuityContext());
Process(new EqualAnnuityContext());
}
public static void Process(AnnuityContext context)
{
context.Calculate();
}
public abstract class AnnuityContext
{
public abstract void Calculate();
}
public class DifferentialAnnuityContext : AnnuityContext
{
public override void Calculate()
{
Debug.WriteLine("Differential");
}
}
public class EqualAnnuityContext : AnnuityContext
{
public override void Calculate()
{
Debug.WriteLine("Equal");
}
}
您可以看到 Process
方法不知道,也不关心它调用的是两种(或更多)类型中的哪一种。
这将消除需要调用计算的代码知道调用哪个,只有一个。
您可以在LINQPad中测试以上程序
关于c# - 如何在 C# 最佳面向对象风格中调用适当的计算类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681457/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!