这是我的问题,我已经解决了,但我认为有更好的方法来做到这一点:
我有以下代码:
public class A
{
public A(int paramA, int paramB)
{
ParamA = paramA;
ParamB = paramB;
}
public int ParamA { get; set; }
public int ParamB { get; set; }
}
我还有以下代码:
public class B : A
{
public B(int c, int d, int paramA, int paramB)
{
C = c;
D = d;
if (C == 0)
{
ParamA = paramA - D;
ParamB = paramB;
}
else
{
ParamA = paramA;
ParamB = paramB;
}
}
public int C { get; set; }
public int D { get; set; }
}
换句话说,分配给 ParamA 的值取决于
C
的值。我知道你可以做类似 public B(int c, int d, int paramA, int paramB) : base(paramA, paramB)
的事情,但这不是我想要的,因为 paramA
将被分配给 ParamA
,无论 C
是什么。代码可以工作,但是还有其他更好的方法吗?
编辑:对评论的回复:
是的,它有一个代码中没有的无参数构造函数。 是的,属性是可变的,这是故意的,有更多的代码。 在这个阶段,我试图实现一个干净的代码,只是在子类中父参数依赖于子参数中的一些特定值。
显然我不知道你这样做的确切原因,但我倾向于尝试只有一个带有超额支付逻辑的
Mortgage
类,并且可能使用一个标志来识别是否存在超额支付。
除此之外,您可以执行以下操作:
public class A
{
public A(int paramA, int paramB)
{
ParamA = paramA;
ParamB = paramB;
}
public int ParamA { get; set; }
public int ParamB { get; set; }
}
public class B : A
{
public B(int c, int d, int paramA, int paramB)
: base(paramA, paramB)
{
C = c;
D = d;
if (C == 0)
{
ParamA -= D;
}
}
public int C { get; set; }
public int D { get; set; }
}
您也可以检查是否在
C == 0
调用中base
,但我不建议这样做(在我看来,一开始可读性较差)。
public class B : A
{
public B(int c, int d, int paramA, int paramB)
: base(c == 0 ? paramA - d : paramA , paramB)
{
C = c;
D = d;
}
public int C { get; set; }
public int D { get; set; }
}