【问题标题】:How do I keep extensibility with private properties?如何保持私有属性的可扩展性?
【发布时间】:2015-03-02 15:45:32
【问题描述】:

我正在学习以下课程。我以缩短属性列表为例。

public class Paycheck 
{
   public decimal Gross { get; private set; }
   public decimal FederalWithholdingTax { get; private set; }
   public decimal StateWithholdingTax  { get; private set;  }
   // ...
}

现在我的想法是创建一个界面来计算所有税收......

public interface IPaycheckDeductionCalculator
{
   void Calculate();
}

之后的想法是在 Paycheck 类之外创建可以执行计算/扣除的方法。随着法律和工资核算流程的运作方式,扣除的执行方式和扣除的内容不断变化,因此我希望保持易于扩展。

我的困境是我想让 Paycheck 属性设置器保持私有,以便任何人都可以更改这些值。在处理完薪水后保持该数据不变是至关重要的。

我考虑过使用委托,但我也不确定这是否是我的答案,因为我仍然无法在 Paycheck 类之外开发所需的方法。

有什么我没有想到的,或者这是“你不能吃蛋糕也不能吃”的情况?

【问题讨论】:

  • 能否创建一个实现该接口的类,然后在Calculate 方法中实例化一个Paycheck 类,从而通过Paycheck 构造函数初始化值?
  • 我考虑过这一点,但是我必须为每个属性初始化一个新类,然后我必须有某种方法将所有这些类减少到一个。 Calculate 方法只负责计算 Paycheck 类的一个属性。

标签: c# interface delegates extensibility


【解决方案1】:

让计算这些值的接口返回它们正在计算的值。将这些接口的实例传递给Paycheck,它可以执行计算(无需了解有关接口实现的任何信息),然后让它设置相应属性的值。

【讨论】:

  • 这是有道理的。不过,我将如何在 Paycheck 类中实现它?我可以将接口注入到类中以执行计算并返回值,但 Paycheck 类必须知道接口想要修改哪个属性。
  • @Safari137 为接口提供几种方法,一种用于计算每个属性。或者让它接受每个属性的接口,就像你说的那样。
猜你喜欢
  • 2022-10-13
  • 2015-04-04
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多