2013-10-04 78 views
3

好的 - 我碰到了一個問題,我很難解決問題。C#窗體繼承 - 父窗體中的函數需要在子窗體中調用overrided函數

我有兩種形式 - 一種是從另一種繼承而來的。我們將它們稱爲FormParent和FormChild。

MyFunction()在FormParent中定義。我不需要重寫它,因爲它會爲許多不同的窗體執行相同的基本操作,但它會調用DoSomethingUnique()。 DoSomethingUnique在父級中定義並在子級中重寫。

我的問題是,因爲我不重寫MyFunction(),當我從FormChild調用它時,它調用的DoSomethingUnique()版本是FormParent函數,而不是FormChild。

有沒有什麼辦法可以避免重寫這兩個函數,但有DoSomethingUnique()的版本稱爲從FormChild的版本?

+5

您所描述的情況聽起來不正確。如果'MyFunction()'調用'DoSomethingUnique()'和'DoSomethingUnique()'被覆蓋,那麼應該調用覆蓋的版本。請向我們展示一些實際的代碼,或者您的實際代碼的類似示例。 – JLRishe

+0

你不需要用'virtual'調用'override'嗎?我可能會錯過一些東西...... – Brian

+1

@Brian是的,你這樣做,但是用戶2848780已經表示他/他正在壓倒該方法。當然,除非我們看到代碼,否則我們不確定情況是什麼。 – JLRishe

回答

1

你想要做的事情肯定會奏效。你只需要確保你有正確的修飾符。

在FormParent ..

virtual public void DoSomethingUnique() 

在FormChild

override public void DoSomethingUnique() 

如果你沒有明確修改與override,那麼你將被調用FormParent方法的方法。

顯然用你的返回類型替換void。

+0

謝謝 - 這正是我所需要的! – user2847870