2012-04-02 67 views
5

子I型有三類:ClassAClassBClassCgetType()返回在父類的構造

ClassC延伸ClassB繼而延伸ClassA

當我從ClassA的構造函數調用GetType()時,.net返回ClassC的類型。我很困惑,因爲這發生在已經工作了一段時間並且我一段時間沒有碰到的代碼中。有.net修補程序改變了GetType()的行爲嗎?我不信。我唯一的想法是,這與我使用的測試框架xUnit有什麼關係?

+0

所有之一 - 謝謝!每個人似乎都在說同樣的事情......這是按照預期和一如既往的方式工作的。 – SFun28 2012-04-02 17:43:35

回答

12

它的行爲完全按照它的設想。 GetType()返回對象實例的實際類型,即使它是一個子類(它總是有表現這種方式)。另一方面typeof(ClassA)總會給你ClassA的類型。

+0

奇怪......我不確定我的單元測試會如何通過。無論如何,似乎我應該使用typeof() – SFun28 2012-04-02 17:41:20

2

如果我理解你的問題,你有一個ClassA a類型,通過調用它你會得到ClassC。如果是這樣,這是最probabbly不是一個真正的ClassA對象,但它是這樣的:

某處在你的代碼有一個初始化像下面:

ClassA a = new ClassC()

考慮到,ClassC : ClassBClassB : ClassA可以做到這一點。

GetType()返回一個real對象類型而不是實際的包裝類型。

1

就我所知,GetType()總是返回實例的類型,而不是基類,不管它在哪裏被調用。

2

GetType函數的行爲與預期的一樣。它應該總是返回值的實際運行時類型。我不相信任何熱門補丁已經改變了這種行爲,但你現在看到的行爲是無可爭辯的。

如果你想看到的聲明類型的方法,而不是然後使用以下

typeof(TheContainingType) 
MethodBase.GetCurrentMethod().DeclaringType