2012-07-16 24 views
7

¿No es posible (excepto el nombre diferente) tener varios métodos genéricos con el mismo nombre pero que implementen una interfaz diferente?Dos métodos genéricos con el mismo nombre

public IList<T> List<T>() where T : class, IMyInterface1 
{ 

    return mylist 
} 

public IList<T> List<T>() where T : class, IMyInterface2 
{ 

    return mylist 
} 

Gracias,

Respuesta

10

No, no se puede sobrecargar con sólo constaints de tipo genérico. Puede sobrecargar mediante el número de los parámetros de tipo, pero no en sus restricciones.

Si está implementando una interfaz puede utilizar la implementación explícita de la interfaz; de lo contrario, le sugiero que simplemente use diferentes nombres. A menudo encuentro que usar nombres diferentes aclara las cosas de todos modos, para ser honesto.

Tenga en cuenta que el ejemplo que ha dado introduce una ambigüedad natural de todos modos: ¿qué esperaría que se llamara si el argumento de tipo implementó ambas interfaces?

Cuestiones relacionadas