2011-11-16 6 views
6

Como sé, todo se deriva del objeto excepto las interfaces en .net. Pero noté que cuando presiono "." después del nombre de la interfaz aparece el método Equals. Y cuando presiono F12 para el método equals, dirige al método equals en la clase de objeto. Si las interfaces no se derivan de la clase de objeto, ¿de dónde viene el método igual?Método de igualdad en las interfaces

Respuesta

1

las interfaces solo pueden estar en objetos.

+0

No creo que esto responda claramente la pregunta. – ChaosPandion

2

Cualquier tipo que implemente la interfaz en última instancia deriva del objeto, por lo tanto, Equals siempre se define.

+0

¿Por qué no está disponible el método ToString()? –

+2

Está disponible. –

14

Desde la sección 13.2 de la especificación C# 4:

Tenga en cuenta que los miembros de objeto de clase no son, estrictamente hablando, los miembros de cualquier interfaz (§13.2). Sin embargo, los miembros del objeto de clase están disponibles a través de la búsqueda de miembros en cualquier tipo de interfaz (§7.4).

Y la sección 7.4:

  • En primer lugar, se determina un conjunto de miembros accesibles llamado N:
    • ...
    • De lo contrario, el conjunto consta de todos accesibles (§ 3.5) miembros llamados N en T, incluidos los miembros heredados y los miembros accesibles llamados N en el objeto. [...]

Y la sección 7.4.1:

Para los efectos de las operaciones de búsqueda miembro, un tipo T se considera que tiene los siguientes tipos de base:

...

• Si T es un tipo de interfaz, los tipos de base de T son las interfaces base de T y el objeto de tipo de clase.

Básicamente se trata de un dulce de azúcar, dejar que el compilador entiende que los miembros de object siempre realmente estar disponible en tiempo de ejecución, a pesar de que en realidad no son miembros del tipo de la expresión que implica para las interfaces.

+0

+1 john para la especificación de especificación C# 4 ...... –

+0

Además, tiene sentido tener estos miembros disponibles. – ChaosPandion