2
我有一個類SafeChargeDeposit
繼承BaseExternalDeposit
。
BaseExternalDeposit
在其構造函數中要求變量類型BaseDepositStructure
。c#設計模式 - 與基地互動
既然它需要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 ... 但是,什麼是錯我的設計嗎?我該如何解決這個問題並保持使用基礎的靈活性。
+1 + V - 這是很好的答案!謝謝 – SexyMF
它確實改變了使用BaseExternalDepodsition的可能性。在OP代碼中BaseExternalDeposit bed = new SafeChargeDeposit();是有效的howvever BaseExternalDeposit bed = new SafeChargeDeposit();將不起作用 –
@RuneFS,如果需要多態性,則可以使用接口基類。我真的沒有看到這個問題。鑑於'DoDeposit()'的結果並不依賴泛型參數,這甚至可以在接口類中(如果它是公共方法所必需的)。我不相信這個答案有任何問題無法解決! :) –