gpt4 book ai didi

c# - 如何在 C# 最佳面向对象风格中调用适当的计算类方法?

转载 作者:行者123 更新时间:2023-11-30 22:10:44 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com