2009-12-03 20 views

Respuesta

8

(personalmente) Solo veo una necesidad de implementaciones explícitas cuando hay un conflicto entre los métodos con la misma firma.

Por ejemplo, al implementar IEnumerable<T>, debe implementar 2 métodos GetEnumerator() que tengan la misma firma, excepto el tipo de devolución. Por lo que tendrá que poner en práctica IEnumerable.GetEnumerator() explícitamente:

public abstract class MyClass<T> : IEnumerable<T> 
{ 
    public IEnumerator<T> GetEnumerator() 
    { 
     return ...; 
    } 

    IEnumerator IEnumerable.GetEnumerator() // explicit implementation required 
    { 
     return GetEnumerator(); 
    } 
} 

Otro uso para una implementación explícita es, si usted no desea que el método que se llama a través de una instancia de objeto, pero sólo a través de una interfaz. Personalmente, creo que esto no tiene mucho sentido, pero en algunos casos muy raros, puede ser útil.

3

La respuesta de Philippe es práctica, pero también hay consideraciones arquitectónicas.

Las interfaces se utilizan para hacer que las clases sean compatibles para que puedan ser consumidas por otros objetos. Si solo los objetos que consumen necesitan la funcionalidad de la interfaz, entonces debe restringirse de esa manera por el principio de privilegio mínimo. Si no fuera necesario exponer ese método de interfaz a todos los demás usuarios de la clase.

Paul

+0

¿Puedes pensar en un ejemplo donde esto podría aplicarse? – jasonh

+0

Web dev. Si una clase está diseñada para proporcionar servicios a través de la web, puede haber métodos para, por ejemplo, la verificación de identidad en una interfaz de seguridad que pueda usarse en ninguna otra circunstancia (localmente). Esta es una pequeña característica conocida de C# que creo que a menudo se ignora. Otros ejemplos por ahí? – Paul

1

Otro caso para las interfaces explícitas es donde el objeto necesita implementar una interfaz para aceptar llamadas de un objeto interno, pero que no quiere exponer a los como parte de su API.

Cuestiones relacionadas