2014-02-26 86 views
0

作爲一個全新的.NET,只是爲了向自己澄清一下:虛擬方法是指動態還是靜態類型?

虛擬方法是指動態還是靜態的對象類型?

Base myObject = new Derived(); 
myObject.Foo(); 

調用派生類的Foo()(假設Foo()在Base中是虛擬的並在Derived中被覆蓋)?

+0

你能不能更清楚請 –

回答

3

你是對的。

術語「靜態」和「動態」類型在這裏是錯誤的。這裏的一切都是靜態輸入的。

+0

謝謝。不是基本的靜態類型和派生是動態的嗎? – user3165438

+3

不。基數是基本類型,派生是派生的。靜態和動態類型與多態不同。 –

+1

誤解,'** Base ** instance = new _Derived _();',是不是粗體是靜態還是斜體是動態的? – user3165438

3

是的,因爲Foo()被覆蓋,所以它是Derived類'Foo()你要打電話!

我從MSDN

引用虛函數是你期望得到 在派生類中重新定義一個成員函數。當使用指針或對基類的引用來引用派生類對象 時,可以調用該對象的虛擬函數 ,並執行派生類的 版本的函數。

+0

那麼動態類型是決定性因素?如果Base base = new Base();'Base中的Foo()將被調用?謝謝。 – user3165438

+0

是的,如果您將對象實例化爲Base,則調用Base中的函數'Foo()'。 –