Метод равных в интерфейсах - PullRequest
6 голосов
/ 17 ноября 2011

Как я знаю, все происходит от объекта, кроме интерфейсов в .net. Но я заметил, что когда я нажимаю "." после имени интерфейса появляется метод Equals. И когда я нажимаю F12 для метода equals, он указывает на метод equals в классе объекта. Если интерфейсы не являются производными от класса объекта, откуда берется метод equals?

Ответы [ 3 ]

14 голосов
/ 17 ноября 2011

Из раздела 13.2 спецификации C # 4:

Обратите внимание, что члены в объекте класса, строго говоря, не являются членами какого-либо интерфейса (§13.2).Однако члены в объекте класса доступны через поиск членов в любом типе интерфейса (§7.4).

И раздел 7.4:

  • Сначала наборопределяется число доступных членов с именем N:
    • ...
    • В противном случае набор состоит из всех доступных (§3.5) членов с именем N в T, включая унаследованные элементы и доступные члены с именем Nв объекте.[...]

И раздел 7.4.1:

В целях поиска члена тип T считаетсяимеют следующие базовые типы:

...

• Если T является типом интерфейса, базовые типы T являются базовыми интерфейсами T и объекта типа класса.

По сути, это выдумка, позволяющая компилятору понять, что члены object всегда будут действительно доступны во время выполнения, даже если они на самом деле не являются членами типавыражение для интерфейсов.

2 голосов
/ 17 ноября 2011

Любой тип, который будет реализовывать интерфейс, в конечном итоге является производным от объекта, следовательно, всегда определяется Equals.

1 голос
/ 17 ноября 2011

интерфейсы могут быть только на объектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...