2011-03-15 54 views
3

我今天在一次採訪中被問到了這個問題,但我無法弄清楚。我被問及從開始到高級問題的所有事情,但這個問題突出了。我描述的是繼承和多態,然後出現了這個問題。我顯然從來沒有嘗試覆蓋[C#/ C++]類中的每個方法,但我並不知道爲了覆蓋特定的方法(例如.ToString)而需要某些內容。我誤解了這個問題還是有需要的東西?如果是的話,是什麼強制這個要求?重寫.NET中的函數有什麼作用

回答

9
  • 基類不能是sealed
  • 在基類的方法必須被標記爲virtualabstract
+0

謝謝。這正是我認爲面試官所期待的。我很抱歉沒有及早回覆你。 – Justin 2011-08-02 19:05:55

1

要覆蓋必須被聲明爲virtualabstract所述的方法(和是在非密封型中)。否則,你唯一的選擇是隱藏它。

1

在C++和C#中,您必須聲明基類函數爲virtual。否則,具有相同名稱和簽名的派生類中的函數將隱藏基類版本。

+0

好的,我開始理解這一點。所以[在C#中]如果我聲明一個基類爲「虛擬」,你說派生類將具有相同的名稱和簽名......但它會具有相同的「功能」..即,派生類函數方法是完全一樣的嗎? – Justin 2011-08-02 19:08:13

+0

您需要將基類*函數*標記爲虛擬類,而不是類。它將具有相同的功能......除非在派生類中重寫該函數。 – 2011-08-02 20:06:45

0

您要覆蓋的方法必須標記爲virtualabstract

0

如果你瞭解多態性和繼承,那麼我覺得你可能會推翻這個問題。我的意思是C#超越僅僅是這樣的:

public override double parentFunction() 
    { 
    //child implementation 
    } 

...和父功能必須delcared虛擬。

沒有逐字聽到問題,很難說面試官正在尋找什麼。我與面試官的經驗是,他們只是想確保你瞭解一般性,但誰知道。我很想知道你是否能得到這份工作:)祝你好運!

+0

嘿,我真的很感謝你的回覆,並希望我能早點回復你。我非常強調,他首先從最難的問題開始,所以我不舒服,甚至搞砸了最簡單的問題。但是這項工作很長時間,我已經受僱了,所以沒什麼大不了的。再次感謝! – Justin 2011-08-02 19:36:20

相關問題