Digamos que tengo una interfaz como que:restricciones de tipo de implementaciones de los miembros de las interfaces genéricas no genéricos en C#
interface IAwesome
{
T DoSomething<T>();
}
¿Hay alguna manera de poner en práctica el método HacerAlgo con tipo de restricción? Obviamente, esto no funcionará:
class IncrediblyAwesome<T> : IAwesome where T : PonyFactoryFactoryFacade
{
public T DoSomething()
{
throw new NotImplementedException();
}
}
Esto, obviamente, no va a funcionar porque este HacerAlgo() no va a satisfacer plenamente el contrato de IAwesome - que sólo funciona para un subconjunto de todos los posibles valores del parámetro de tipo T. ¿Hay alguna forma de hacer que este trabajo no tenga algo de "magia negra" (que es lo que voy a hacer como último recurso si la respuesta es no)?
Honestamente, no creo que sea posible, pero me pregunto qué piensan.
EDITAR: La interfaz en cuestión es System.Linq.IQueryProvider por lo que no se puede modificar la propia interfaz.
Sí, eso es a lo que le tenía miedo. –
Has usado "T" para significar tres cosas diferentes pero estrechamente relacionadas en este código. Eso es muy confuso ¿Puedes hacer que al menos uno de ellos tenga otro nombre? –
Sí, lo siento, copiar y pegar es malo ... Reparado - gracias por la pista. ;) – Lucero