首先,明白爲什麼C#不會讓您在銀行賬戶列表中執行此操作。
如果您有各種銀行賬戶,那麼無論你做的列表中的任何人需要適用於他們中的每一個。你不能在一個對象上調用一個方法,除非該對象保證有該方法。靜態類型系統是儘可能早地提醒你的。
話雖這麼說,如果你真的知道你只有銀行賬戶種類屈指可數,你也許可以單獨列舉出來:
foreach(var account in accounts.OfType<VistaAccount>())
{
// call methods specific to "Vista" accounts
}
foreach(var account in accounts.OfType<OtherAccount>())
{
// call methods specific to "Other" accounts
}
現在記住,這種方法並不能很好地擴展在長期。如果將來引入更多亞型,您可能需要回到那個位置並添加更多特殊情況。
如果您想要在每個帳戶上執行特定的操作,並且該操作的詳細信息因每種帳戶類型而異,則有更好的方法來執行此操作。只需用你的基地的銀行帳戶類型聲明一個抽象方法:
public abstract void Operation();
然後實現(override
)這種方法在每個帳戶的種類,具體到那種指令。
- 從長遠來看,這可以很好地擴展,因爲您不必在每次引入更多賬戶類型時都引入特殊情況。還有一件事是爲未來的自己或代碼的未來維護者記錄。
- 它更方便,因爲如果你忘記指定子類型的操作,你會在編譯時得到一個好消息。所以如果你忘記這麼做的話,那就有一個很好的安全網。
- 因爲現在每種銀行賬戶都支持該操作,所以編譯器會很樂意讓您在銀行賬戶列表中撥打電話。您不需要我最初提出的手動類型檢查。
發佈類聲明的代碼。方法是公開的嗎? –
是的,每個類的構造函數和方法都是公共的。 –