我有一些基類派生類。 基類是FormItem,派生類例如是InputField,Label或Button。從數組列表中的一個對象中調用適當的方法
在FormItem類我有許多虛擬功能如:
internal virtual void draw(parameters) {}
該功能在每個派生類超載。
我將派生類中創建的對象存儲在名爲formItems的數組列表中。
當我撥打電話這樣的:
((FormItem)formItems[index]).draw(parameters)
我希望被稱爲重載函數,因爲在基類的功能是虛擬的。然而,調用基類的draw()方法。
一個比較難看的解決方案是使一個巨大的if語句像這樣:
if (formItems[index] is Button)
{
((Button)formItems[index]).draw(parameters);
}
else if (formItems[index] is Label)
等等
但是我希望有一個更好的解決方案,沒有按」 t需要我創建這個巨大的if-else塊,但允許我讓編譯器自動將我正在查看的項目解釋爲派生類的對象,並調用相應的draw()方法。有誰能夠幫助我?
如何覆蓋派生類中的虛擬方法?你可以告訴我們你的代碼,請 – horgh
這是OOP的概念,多態性,你不必檢查類型並調用適當的方法。你的蹤跡很好,但顯然你的執行有一個錯誤。郵政編碼示例如何重寫虛擬方法繪製。 –