2011-11-16 54 views
6

據我所知,除了.net中的接口外,所有東西都是從對象派生的。但我注意到,當我按「」。出現接口名稱Equals方法後。而當我按F12等於方法時,它將指向對象類中的equals方法。如果接口不是從對象類派生的,那麼equals方法來自哪裏?接口中的等價方法

回答

1

接口只能存在於對象上。

+0

我不相信這明顯地回答了這個問題。 – ChaosPandion

2

任何實現接口的類型最終都會從對象派生,因此Equals總是被定義的。

+0

爲什麼不提供ToString()方法? –

+2

它可用。 –

14

從C#4規範的部分13.2:

注意,在類對象的成員不是,嚴格地說,任何接口的構件(第13.2節)。但是,類對象中的成員可以通過任何接口類型(§7.4)中的成員查找來使用。

而第7.4:

  • 首先,一個名爲N組訪問的成員的確定:
    • ...
    • 否則,該組由所有可訪問(§的3.5)T中名爲N的成員,包括繼承成員和對象中名爲N的可訪問成員。 [...]

而第7.4.1:

對於成員查找的目的,類型T被認爲是具有以下基類型:

...

•如果T是接口類型,T的基類型是T和類類型對象的基接口。

基本上這是一個忽悠,讓編譯器明白的object成員將始終真的可在執行時,即使他們沒有真正參與的接口表達的類型的成員。

+0

對於C#4規範說明書+1約翰...... –

+0

此外,讓這些成員可用也是有意義的。 – ChaosPandion