【发布时间】:2011-10-25 11:09:08
【问题描述】:
我有一个类 SafeChargeDeposit 继承自 BaseExternalDeposit。BaseExternalDeposit 在其构造函数中需要一个变量类型BaseDepositStructure。
因为它需要BaseDepositStructure,所以我不能在SafeChargeDeposit 中使用它的子元素。
这是代码:
abstract class BaseExternalDeposit
{
public abstract BaseExternalDepositResult DoDeposit();
protected BaseDepositStructure depositStructure;
public BaseExternalDeposit(BaseDepositStructure depositStructure)
{
this.depositStructure = depositStructure;
}
}
class SafeChargeDeposit : BaseExternalDeposit
{
public SafeChargeDeposit(CreditCardDepositStructure depositStructure):base(depositStructure){}
public override BaseExternalDepositResult DoDeposit(){
/////// I CAN USE THIS MEMBER:
depositStructure.Amount = 50;
/////// BUT I CANNOT USE THIS MEMBER:
depositStructure.CreditCardNumber = "123456";
}
}
public class BaseDepositStructure
{
public double Amount = 0.0;
}
public class CreditCardDepositStructure : BaseDepositStructure
{
public string CreditCardNumber = string.Empty;
}
我明白为什么我可以使用 depositStructure.Amount 而不能使用 depositStructure.CreditCardNumber ... 但是我这里的设计有什么问题?我该如何解决这个问题并保持使用 Bases 的灵活性。
【问题讨论】:
标签: c# design-patterns base